在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。