【发布时间】:2016-08-05 17:26:46
【问题描述】:
我正在构建一个 docker 镜像,它将为 als jenkins slave 服务。 映像需要 Java 和 SSHD。 目前我有一个可以作为詹金斯奴隶的码头集装箱。我的奴隶中的用户是我在 dockerfile 中创建的用户 jenkins。
FROM java:8-jdk
ENV JENKINS_HOME /var/jenkins_home
ARG user=jenkins
ARG group=jenkins
ARG uid=999
ARG gid=999
RUN groupadd -g ${gid} ${group} \
&& useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}
VOLUME /var/jenkins_home
WORKDIR /var/jenkins_home
现在我希望我的 jenkins-slave 能够构建 docker 映像。所以我的詹金斯需要运行的每个 docker-command 都将在这个从服务器上执行。为此,我必须将我的 docker 套接字安装到我的从属容器。
我使用 docker-compose 启动我的从属容器。在这里你看我如何启动我的奴隶:
jenkins-slave:
build: ./slave
image: jenkins-slave:1.0
container_name: jenkins-slave
volumes:
- slave-volume:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
...
所以现在我不得不更改我的 Dockerfile,因为默认情况下只有 root 用户能够使用 docker。我希望我的 jenkins 用户可以执行 docker 命令,所以我更改了 Dockerfile 并添加了:
RUN groupadd -g 983 docker \
&& usermod -a -G docker jenkins
现在我可以使用 jenkins 用户执行 ssh jenkins@172.19.0.2 并执行 docker 命令。
但这仅有效,因为我主机上的 docker 组的 gid 也是 983 (centos7)。但在我的 Ubuntu 上,gid 是 1001。所以我的整个设置将无法正常工作。所以现在我的问题:
有没有办法在您的 dockerfile 中找到您主机的 gid?
【问题讨论】:
-
最简单的解决方案是对整个组织的 gid 进行标准化,在任何系统上安装引擎之前创建它。
-
也许这是唯一的解决方案。 github.com/docker/docker/issues/21184
标签: jenkins docker docker-compose dockerfile