我有以下工作流程,用于将Web应用发布到我的开发服务器。该服务器只有一个docker主机,我正在使用docker-compose来管理容器。
我遇到的问题是在步骤3中。通过设置方式,jenkins容器可以访问主机泊坞窗,因此docker在构建脚本中运行任何命令与在主机上运行该命令本质上相同。DockerFile对于詹金斯,使用以下命令完成此操作:
docker
DockerFile
FROM jenkins USER root # Give jenkins access to docker RUN groupadd -g 997 docker RUN gpasswd -a jenkins docker # Install docker-compose RUN curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose RUN chmod +x /usr/local/bin/docker-compose USER jenkins
并将以下卷映射到jenkins容器:
-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker
jenkins中的典型构建脚本如下所示:
docker-compose build docker-compose up
可以,但是有两个问题:
感觉真像是在砍。但是我发现的唯一其他选择是将docker插件用于jenkins,发布到注册表,然后通过某种方式让主机知道需要重启。这是很多可移动的部分,并且docker-jenkins插件要求docker主机位于开放端口上,我真的不想透露它。
jenkins DockerFile包含groupadd -g 997 docker需要它才能使jenkins用户访问docker。但是,GID(997)是主机上的GID,因此不可移植。
groupadd -g 997 docker
我不确定我要寻找什么解决方案。我看不到任何实际的方法可以解决该问题,但是如果有一种方法可以允许在jenkins容器内运行docker命令而不必在DockerFile中对GID进行硬编码,那就太好了。有人对此有任何建议吗?
我遇到了同样的问题。由于GID问题,我最终给了Jenkins无密码的sudo特权。我在这里写了更多有关此的内容:https : //blog.container- solutions.com/running-docker-in-jenkins-in-docker
这实际上并没有影响安全性,因为拥有docker特权实际上等同于sudo权限。