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套接字 。 我所要做的就是将套接字文件chgrp
给jenkins
组,以便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