我正在建造一个将为als jenkins奴隶服务的码头图像。 该映像需要Java和SSHD。 目前我有一个可以作为詹金斯奴隶的码头工人集装箱。我的奴隶中的用户是我在dockerfile中创建的用户jenkins。
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
...
现在我希望我的jenkins-slave能够构建docker图像。所以我的jenkins需要运行的每个docker-command都将在这个slave上执行。因此,我必须将我的docker套接字安装到我的从属容器中。
我使用docker-compose启动我的slave-container。在这里你看我如何开始我的奴隶:
RUN groupadd -g 983 docker \
&& usermod -a -G docker jenkins
所以现在我不得不更改我的Dockerfile,因为默认情况下只有root用户才能使用docker。我希望我的jenkins用户可以执行docker命令,所以我更改了我的Dockerfile并添加了:
ssh jenkins@172.19.0.2
现在我能够执行gid
并使用jenkins用户执行docker命令。
但这只能起作用,因为我主机上的docker组的983
也是gid
(centos7)。但在我的Ubuntu上1001
是gid
。那么我的整个设置将无法正常工作。所以现在我的问题是:
您的dockerfile中有没有办法到WHERE
DateColumn >=
CASE WHEN DATEPART(dw,GETDATE()) = 1 -- datepart returns an integer, so no quotes
THEN DATEADD(wk,DATEDIFF(wk,0,GETDATE()) - 1,0)
ELSE DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0)
END
主机?
答案 0 :(得分:1)
Dockerfile
在构建主机上的构建时使用。最终将构建的映像作为容器运行的主机在此阶段是未知的,因此有关主机的信息不容易查找。通常在所有主机上使用相同的映像,因此在构建时配置GID也很困难。
BMitch建议在整个组织中使用一致的GID(和UID)是最佳解决方案。这通常是一个好主意,不仅仅是码头工人。它有助于集中用户管理,NFS喜欢它,LDAP更容易移动。
如果一致的GID太难设置,那么有几种方法可以解决这个问题......
如果您支持的GID数量有限,则可以从jenkins基本图像创建多个图像。
标记:my/jenkins-centos
FROM my/jenkins
RUN groupadd -g 983 docker \
&& usermod -a -G docker jenkins
标记:my/jenkins-ubuntu
FROM my/jenkins
RUN groupadd -g 1001 docker \
&& usermod -a -G docker jenkins
然后选择在哪个主机上运行的图像。
如果 支持变量docker
GID,那么groupadd
逻辑可以在启动器脚本中的容器启动时运行,然后启动组设置然后启动詹金斯。您可能需要在容器中的某处安装/etc/group
以便能够查看主机信息。