我正在阅读Jenkins Docker README的这一部分,从我目前的理解来看,似乎有一部分与自己矛盾。 https://github.com/jenkinsci/docker/blob/master/README.md
在我看来,据说不使用绑定安装,然后强烈建议使用绑定安装?
注意:避免使用从主机上的文件夹到/ var / jenkins_home 的绑定挂载,因为这可能会导致文件许可 问题(在容器内部使用的用户可能无权 主机上的文件夹)。如果您确实需要绑定安装 jenkins_home,确保主机上的目录可通过以下方式访问 容器内的jenkins用户(jenkins用户-uid 1000)或使用 -u some_other_user参数和docker run。
docker run -d -v jenkins_home:/ var / jenkins_home -p 8080:8080 -p 50000:50000 jenkins / jenkins:lts这将以分离模式运行Jenkins 加上端口转发和音量。您可以使用 命令“ docker logs CONTAINER_ID”以检查首次登录 令牌。容器的ID将从上面的命令输出中返回。
备份数据
如果将装载绑定到卷中,则只需备份 该目录(即jenkins_home)随时显示。
强烈建议。像对待数据库一样对待jenkins_home目录-在Docker中,通常会将数据库放在 一卷。
您是否使用绑定安装?你会推荐他们吗?为什么或者为什么不?该文档似乎模棱两可。
答案 0 :(得分:1)
如前所述,语法为for a volume:
docker run -d -v jenkins_home:/var/jenkins_home -n jenkins ...
定义了一个名为jenkins_homes的Docker卷,它将在以下位置创建:
/var/lib/docker/volumes/jenkins_home
。
想法是您可以轻松backup said volume:
$ mkdir ~/backup
$ docker run --rm --volumes-from jenkins -v ~/backup:/backup ubuntu bash -c “cd /var/jenkins_home && tar cvf /backup/jenkins_home.tar .”
并将其重新加载到另一个Docker实例。
这不同于bind-mounts,后者确实涉及构建一个 new Docker映像,以便能够由本地用户(定义的默认用户instrad)挂载本地文件夹所有者。在Jenkins官方图片中:1000:1000
)
FROM jenkins/jenkins:lts-jdk11
USER root
ENV JENKINS_HOME /var/lib/jenkins
ENV COPY_REFERENCE_FILE_LOG=/var/lib/jenkins/copy_reference_file.log
RUN groupmod -g <yourId>jenkins
RUN usermod -u <yourGid> jenkins
RUN mkdir "${JENKINS_HOME}"
RUN usermod -d "${JENKINS_HOME}" jenkins
RUN chown jenkins:jenkins "${JENKINS_HOME}"
VOLUME /var/lib/jenkins
USER jenkins
请注意,您必须声明一个 new 卷(此处为/var/lib/jenkins
),因为正如jenkinsci/docker
issue 112所示,已经声明了官方/var/jenkins_home
路径作为Jenkins官方图片中的VOLUME,则无法对其进行chown或chmod。
该方法的优点是无需使用Docker即可查看Jenkins主页的内容。
您可以通过以下方式运行它:
docker run -d -p 8080:8080 -p 50000:50000 \
--mount type=bind,source=/my/local/host/jenkins_home_dev1,target=/var/lib/jenkins \
--name myjenkins \
myjenkins:lts-jdk11-2.190.3
sleep 3
docker logs --follow --tail 10 myjenkins