我有一个工作流程如下,用于将webapps发布到我的开发服务器.服务器有一个docker主机,我使用docker-compose来管理容器.
我遇到的问题是在第3步.我设置它的方式,jenkins容器可以访问主机docker,因此docker在构建脚本中运行任何命令与在主机上运行它基本相同.这是使用以下DockerFilejenkins完成的:
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
Run Code Online (Sandbox Code Playgroud)
并将以下卷映射到jenkins容器:
-v /var/run/docker.sock:/var/run/docker.sock
-v /usr/bin/docker:/usr/bin/docker
Run Code Online (Sandbox Code Playgroud)
jenkins中的典型构建脚本如下所示:
docker-compose build
docker-compose up
Run Code Online (Sandbox Code Playgroud)
这样可行,但有两个问题:
它真的像一个黑客.但我发现的唯一其他选项是使用jenkins的docker插件,发布到注册表,然后让某些方法让主机知道它需要重新启动.这是非常多的移动部件,docker-jenkins插件要求docker主机在一个开放端口上,我真的不想暴露它.
jenkins DockerFile包含groupadd -g 997 docker了让jenkins用户访问docker所需的东西.但是,GID(997)是主机上的GID,因此不可移植.
我不确定我正在寻找什么解决方案.我没有看到任何实用的方法来绕过这种方法,但如果有一种方法允许在jenkins容器内运行docker命令而不必在DockerFile中硬编码GID,那将会很好.有人对此有任何建议吗?
我遇到了同样的问题.由于GID问题,我最终给了Jenkins无密码的sudo权限.我在这里写了更多关于这个的内容:http://container-solutions.com/2015/03/running-docker-in-jenkins-in-docker/
这并不会真正影响安全性,因为拥有docker权限实际上等同于sudo权限.
小智 5
我之前的回答更通用,告诉你如何在运行时修改容器内的GID.现在,巧合的是,我的亲密同事的某个人要求一个可以进行码头开发的jenkins实例,所以我创建了这个:
FROM bdruemen/jenkins-uid-from-volume
RUN apt-get -yqq update && apt-get -yqq install docker.io && usermod -g docker jenkins
VOLUME /var/run/docker.sock
ENTRYPOINT groupmod -g $(stat -c "%g" /var/run/docker.sock) docker && usermod -u $(stat -c "%u" /var/jenkins_home) jenkins && gosu jenkins /bin/tini -- /usr/local/bin/jenkins.sh
Run Code Online (Sandbox Code Playgroud)
(父Dockerfile与我在回答中描述的相同:在预构建的docker容器中更改用户的uid(jenkins))
要使用它,请同时安装jenkins_home和docker.sock.
docker run -d /home/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock <IMAGE>
Run Code Online (Sandbox Code Playgroud)
容器中的jenkins进程将与挂载的主机目录具有相同的UID.假设主机上的docker组可以访问docker套接字,则在容器中创建一个组,也称为docker,具有相同的GID.
| 归档时间: |
|
| 查看次数: |
5626 次 |
| 最近记录: |