Java 使用TestContainers和Jenkins在docker容器中运行测试(docker.sock权限被拒绝)

Java 使用TestContainers和Jenkins在docker容器中运行测试(docker.sock权限被拒绝),java,docker,jenkins,testcontainers,Java,Docker,Jenkins,Testcontainers,在我的测试中,我使用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/

在我的测试中,我使用
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集群
容器

对于
Jenkins
I,在Jenkins文件中添加节点:

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处运行的。我用相同的userid和groupid创建了相同的用户。但是当我开始测试时,我得到了对
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)
原因:java.io.IOException:com.sun.jna.LastErrorException:[13]权限被拒绝
位于org.testcontainers.shaded.org.scalasbt.ipcsocket.UnixDomainSocket.(UnixDomainSocket.java:62)
位于org.testcontainers.dockerclient.transport.okhttp.UnixSocketFactory$1(UnixSocketFactory.java:27)
位于org.testcontainers.dockerclient.transport.okhttp.UnixSocketFactory.createSocket(UnixSocketFactory.java:27)
我研究了这一页:但它对我没有帮助。在这里,一切都从根用户开始,当然他没有问题

如何修复它?

脏修复是:

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

这可能有一些安全风险,但我在本地计算机上。

您可以尝试将
jenkins
用户添加到
docker
组吗。查看此以了解更多信息