【发布时间】:2016-12-10 06:30:14
【问题描述】:
我尝试在 Centos7.1 上的 Jenkins 从属容器中运行 Docker。 这是我在 dockerfile 中执行的步骤:
FROM java:8
ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000
RUN groupadd -g ${gid} ${group} \
&& useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}
RUN groupadd -g 983 docker \
&& gpasswd -a ${user} docker
所以我有一个用户 jenkins (id1000) 在一个组 jenkins (gid1000) + 在一个组 docker (gid983) 中。我为什么选择gid 983?
好吧,如果我在主机上查看/etc/group,我会看到:
docker:x:983:centos
在我的 docker-compose 脚本中,我安装了我的 docker 套接字,这就是我使用与主机上相同的 gid 的原因。
docker-compose 的一部分:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
当我以 root 身份在容器内exec 时:
root@c4af16c386d7:/var/jenkins_home# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins-slave 1.0 94a5d6606f86 10 minutes
jenkins 2.7.1 b4974ba62598 3 weeks ago 741 MB
java 8-jdk 264282a59a95 7 weeks ago 669.2 MB
但作为詹金斯用户:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
在我的容器中:
cat /etc/passwd
jenkins:x:1000:1000::/var/jenkins_home:/bin/bash
cat /etc/group
jenkins:x:1000:
docker:x:983:jenkins
加法:
$ docker exec -it ec52d4125a02 bash
root@ec52d4125a02:/var/jenkins_home# whoami
root
root@ec52d4125a02:/var/jenkins_home# su jenkins
jenkins@ec52d4125a02:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a23521523249 jenkins:2.7.1 "/bin/tini -- /usr/lo" 20 minutes ago Up 20 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:32777->22/tcp, 0.0.0.0:32776->50000/tcp jenkins-master
ec52d4125a02 jenkins-slave:1.0 "setup-sshd" 20 minutes ago Up 20 minutes 0.0.0.0:32775->22/tcp, 0.0.0.0:32774->8080/tcp, 0.0.0.0:32773->50000/tcp jenkins-slave
但是:
$ docker exec -it -u jenkins ec52d4125a02 bash
jenkins@ec52d4125a02:~$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
在第一种情况下,我的詹金斯用户:
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins),983(docker)
第二种情况:
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
【问题讨论】:
-
您缺少能够重新创建问题所需的几个关键部分。特别是 Dockerfile 中的
FROM行。我做了类似的事情,主要区别在于我的 Jenkins 映像安装 Docker 而不是挂载可执行文件,并且我的命令是基于 debian 的。您的$DOCKER_HOST变量是否在您的容器中定义? -
变量未定义。实际上,我尝试在使用 docker compose 创建的 jenkins-slave 中将 docker 用作 jenkinsuser。它只是一个带有 java 和 SSH 访问的容器,它有一个 jenkins-user + 组和挂载的 docker 卷。它在 dockerfile 中并不真正包含 jenkins(它来自 master)。我已经添加了我的 FROM + 我不使用那个变量。
-
@BMitch 我还在我的问题中添加了一个补充内容。
-
我在我的实验室里运行了你的 Dockerfile。使用 jenkins 用户运行在
id的输出中显示 gid 983。无法重现您的问题。
标签: jenkins docker dockerfile