在jenkins中执行docker命令(在docker容器中)

用docker工具撰写我启动一个jenkins容器,我想有可能执行docker命令与(docker安装在服务器上)。

但是,当我试图做一个简单的testing运行hello-world图像我有以下错误:

docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.

我在泊坞窗组上设置了用户,我的泊坞窗组合文件出了什么问题? 在其他post中,我看到如果我添加此行:

 /var/run/docker.sock:/var/run/docker.sock 

我的jenkins的容器可以与docker进行沟通

我的docker撰写文件

 jenkins: image: jenkins:2.32.3 ports: - 8088:8080 - 50000:50000 volumes: - /home/my-user-name/docker-jenkins/jenkins_home:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /tmp:/tmp 

要访问docker.sock文件,您必须以具有文件系统访问权限的用户身份运行,才能读写此套接字。 默认情况下,这与主机系统上的root用户和/或docker组一起使用。

当你将这个文件挂载到容器中时,该挂载在文件上保持相同的uid / gid权限,但是这些id可能映射到容器内的不同用户。 因此,您应该在容器内创build一个组作为Dockerfile的一部分,映射到主机上存在的相同gid,然后将您的jenkins用户分配给该组,以便它可以访问docker.sock。 这里是一个Dockerfile的例子,我这​​样做:

 ... ARG DOCKER_GID=993 RUN groupadd -g ${DOCKER_GID} docker \ && useradd -m -d /home/jenkins -s /bin/sh jenkins \ && usermod -aG docker jenkins ... 

在上面的例子中,993是我的主机上的docker gid。