簡體   English   中英

使用 TestContainers 和 Jenkins 在 docker 容器中運行測試(docker.sock 權限被拒絕)

[英]Run tests in docker container using TestContainers and Jenkins (docker.sock Permission denied)

在我的測試中,我使用TestContainers 我想使用 Jenkins 在容器中運行測試。 我為使用maven運行測試創建了這個圖像。 Dockerfile:

FROM registry.company.com/maven:3-jdk-8-slim

RUN apt update
RUN apt install -y wget libatomic1 curl gnupg

RUN wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.6/ndbclient_7.6.10-1debian9_amd64.deb \
&& dpkg -i ndbclient_7.6.10-1debian9_amd64.deb && rm ndbclient_7.6.10-1debian9_amd64.deb
RUN ln -s /usr/lib/x86_64-linux-gnu/libndbclient.so.6.1.0 /usr/lib/x86_64-linux-gnu/libndbclient.so

RUN curl -sL https://deb.nodesource.com/setup_10.x  | bash -
RUN apt-get -y install nodejs

RUN groupadd --gid 10000 ldap && useradd -m --uid 10028 --gid 10000 jenkins
RUN echo "jenkins ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers

COPY settings.xml /home/jenkins/

USER jenkins

在我的測試中,我使用MySQL Cluster容器。

對於Jenkins我在 Jenkinsfile 中添加節點:

node('Docker') {
    checkout scm

    docker.withRegistry('http://registry.company.com/v2/', 'cred_id') {
        docker.image('integration-tests:latest')
                .inside('-v $HOME/.m2:/home/jenkins/.m2:rw -u jenkins') {
                    stage('Test') {
                        sh 'mvn clean -s /home/jenkins/settings.xml'
                        sh 'mvn -s /home/jenkins/settings.xml test -DargLine="-Djava.library.path=/usr/lib/x86_64-linux-gnu/"'
                    }
                }
    }
}

問題是 Jenkins 是從用戶 jenkins 運行的。 我使用相同的用戶 ID 和組 ID 創建了相同的用戶。 但是當我開始測試時,我發現對docker.sock訪問被拒絕:

Caused by: java.io.IOException: com.sun.jna.LastErrorException: [13] Permission denied
    at org.testcontainers.shaded.org.scalasbt.ipcsocket.UnixDomainSocket.<init>(UnixDomainSocket.java:62)
    at org.testcontainers.dockerclient.transport.okhttp.UnixSocketFactory$1.<init>(UnixSocketFactory.java:27)
    at org.testcontainers.dockerclient.transport.okhttp.UnixSocketFactory.createSocket(UnixSocketFactory.java:27)

我研究了這個頁面: https : //www.testcontainers.org/supported_docker_environment/continuous_integration/dind_patterns/但它沒有幫助我。 一切都從root用戶開始,當然他沒有問題。

我該如何解決?

一個骯臟的修復是:

sudo chmod a+rw /var/run/docker.sock

這可能有一些安全風險,但我在我的本地機器上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM