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

时间:2017-03-17 13:57:23

标签: shell docker jenkins

使用docker compose我启动一个jenkins容器,我希望能够执行docker命令(在服务器上安装docker)。

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

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

我将用户设置在docker组上,我的docker撰写文件出了什么问题? 在其他帖子中,我看看是否添加此行:

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

我的jenkins容器可以与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

1 个答案:

答案 0 :(得分:2)

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

当您将此文件挂载到容器中时,该挂载会对文件保留相同的uid / gid权限,但这些ID可能会映射到容器内的不同用户。因此,您应该在容器内创建一个组作为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。