我可以正常工作,至少是自动化的,但目前仅在Mac的docker上工作。
Mac的Docker具有独特的文件权限模型。手动将/var/run/docker.sock赋予jenkins用户有效,并且在容器重新启动甚至映像重新生成期间仍然存在,但过去的docker守护程序重新启动则不会。另外,您无法在Dockerfile中执行chown,因为docker.sock还不存在,并且您无法在入口点中执行,因为它作为jenkins运行。
所以我要做的就是将詹金斯添加到``staff’‘组中,因为在我的Mac上,/var/run/docker.sock被符号链接到/Users//Library/Containers/com.docker.docker/Data/s60是uid和gid的工作人员。这使jenkins用户可以在主机上运行docker命令。
Dockerfile:
FROM jenkins:latestUSER rootRUN apt-get update && apt-get install -y build-essential && apt-get clean && rm -rf /var/lib/apt/lists/*COPY docker /usr/bin/docker# To allow us to access /var/run/docker.sock on the MacRUN gpasswd -a jenkins staffUSER jenkinsENTRYPOINT ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]
docker-compose.yml文件:
version: "3"services: jenkins: build: ./cd_jenkins image: cd_jenkins:latest ports: - "8080:8080" - "5000:5000" volumes: - ./jenkins_home:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock
但是,这不能移植到其他系统(并且该docker使Mac组保持“人员”,我想不能保证)。我很乐意提出改进建议,以使该解决方案能够在主机系统上正常工作。在诸如詹金斯(Jenkins)Docker容器内的Execute
docker host命令之类的问题中建议的其他选项包括:
- 安装sudo并让jenkins sudo并使用sudo运行所有docker命令:增加了安全性问题
- “将jenkins添加到docker组”-仅限于UNIX,可能依赖于将gid从主机匹配到容器,对吗?
- 对包含的docker可执行文件执行setuid操作可能有效,但与sudo一样存在安全性提升问题。



