jenkins容器中的docker工具(与装载的docker套接字)没有finddocker守护进程来连接

我刚刚开始了一个jenkins docker容器,里面有一个如下的docker插槽:

docker run -d \ --publish 8080:8080 \ --publish 50000:50000 \ --volume /my_jenkins_home:/var/jenkins_home \ --volume /var/run/docker.sock:/var/run/docker.sock \ --restart unless-stopped \ --name my_jenkins_container \ company/my_jenkins:latest 

然后我像这样打开容器:

 docker exec -it my_jenkins_container bash 

jenkinspipe道脚本中的tool 'docker' docker tool 'docker'命令自动在以下path中安装了/var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker二进制文件: /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker

但是,当我尝试从该docker二进制码运行docker命令( 假设它将连接到已挂载在/var/run/docker.sock的docker套接字 ),它会返回以下错误

 $ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker images Cannot connect to the Docker daemon. Is the docker daemon running on this host? 

我怎样才能确保这个docker二进制文件( 通过jenkins' tool 'docker'命令自动安装的二进制文件 )通过连接到/var/run/docker.sock的装载docker套接字来运行它的docker命令?

简答:

装入的docker套接字文件的文件权限必须修改


长答案:

当我试图在/path/to/dockerTool/bin/docker ps -a容器上执行/path/to/dockerTool/bin/docker ps -a时,它产生了一个错误。

 $ docker exec -it my_jenkins_container bash -c "/var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker ps -a" Cannot connect to the Docker daemon. Is the docker daemon running on this host? 

然后,当我试图用user=root执行/path/to/dockerTool/bin/docker ps -a时,它工作正常。

 $ docker exec -it --user=root my_jenkins_container bash -c "/var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker ps -a" CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9dd56411efe company/my_jenkins:latest "/bin/tini -- /usr/lo" 49 seconds ago Up 49 seconds 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp my_jenkins_container 

所以这意味着我只需要设置适当的权限到docker套接字 。 我所要做的就是将套接字文件chgrpjenkins组,以便jenkins组/用户可以读/写该套接字文件。 ( 这里包含了chgrp命令的前后 ):

 $ docker exec -it my_jenkins_container bash -c "ls -l /var/run/docker.sock" srw-rw---- 1 root 999 0 Jan 15 08:29 /var/run/docker.sock $ docker exec -it --user=root my_jenkins_container bash -c "chgrp jenkins /var/run/docker.sock" $ docker exec -it my_jenkins_container bash -c "ls -l /var/run/docker.sock" srw-rw---- 1 root jenkins 0 Jan 15 08:29 /var/run/docker.sock 

之后,执行/path/to/dockerTool/bin/docker ps -a作为非root用户运行良好

 $ docker exec -it my_jenkins_container bash -c "/var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker ps -a" CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9dd56411efe company/my_jenkins:latest "/bin/tini -- /usr/lo" 3 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp my_jenkins_container