当前位置: 首页 > 知识库问答 >
问题:

JenkinsDocker映像,是否使用绑定挂载?

支彭亮
2023-03-14

我正在通读詹金斯·多克的自述,似乎有一部分与我目前的理解相矛盾。https://github.com/jenkinsci/docker/blob/master/README.md

在我看来,是说不使用绑定挂载,然后说强烈建议使用绑定挂架?

注意:避免使用从主机上的文件夹到 /var/jenkins_home 的绑定装载,因为这可能会导致文件权限问题(容器内使用的用户可能没有对主机上的文件夹的权限)。如果确实需要绑定挂载jenkins_home,请确保容器内的 jenkins 用户(jenkins user - 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将从上面命令的输出中返回。

如果您将mount绑定到卷中,您可以随时简单地备份该目录(即jenkins_home)。

强烈建议这样做。像对待数据库一样对待jenkins_home目录 - 在 Docker 中,您通常会将数据库放在卷上。

你使用捆绑坐骑吗?你会推荐他们吗?为什么或为什么不?文件似乎是含糊不清的。

共有1个答案

公良鸿禧
2023-03-14

如前所述,使用的语法适用于卷:

docker run -d -v jenkins_home:/var/jenkins_home -n jenkins ...

这定义了一个 Docker 卷名称jenkins_homes,它将在
/var/lib/docker/volumes/jenkins_home 中创建。

其想法是,您可以轻松备份所述卷:

$ 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实例。

这与绑定挂载不同,后者确实涉及构建一个新的Docker映像,以便能够由您的本地用户挂载本地文件夹所有者(包含官方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

请注意,您必须声明一个新卷(这里是/var/lib/jenkins),因为正如jenkinsci/docker问题112中所示,官方的/var/jenkins_home路径已经在官方Jenkins映像中声明为VOLUME,您不能chown或chmod它。

这种方法的优点是不必使用Docker就可以看到Jenkins home的内容。

您应该使用以下命令运行它:

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
 类似资料:
  • 我正在尝试在我的环境中测试和使用docker。这是我访问tomcat时的Dockerfile(),我发现这个问题。 注= 建筑 跑 Dockerfile 一件奇怪的事情是,如果我只设置而不设置,我就可以访问或我的应用程序我的文件中是否缺少任何内容? 谷歌搜索=

  • 问题内容: 我有以下代码: 在这种情况下,我需要mysql_real_escape_string还是可以吗? 问题答案: 不,在使用准备好的语句时,您不必自己逃避价值 (即,您不需要调用):DB引擎将自己执行该操作。 (实际上,如果您正在调用并使用绑定参数,则您的字符串将被转义两次- 并不是很好:您最终会到处转义字符…) 附带说明:您的值以整数形式传递 (如所示),因此即使您未使用准备好的语句,也

  • 问题内容: 我正在测试一个小的搜索功能: 但是我遇到了一个我似乎无法解决的错误。您可以在此处查看PDO查询: 如您所见,我正在尝试从查询中绑定参数,但是我不知道这是否真的可能吗? 我收到错误: 未捕获的异常“ PDOException”,消息为“ SQLSTATE [42000]:..... 而且我可以在错误中看到’‘已放在test1%’test1’%附近 我正在尝试的可能吗,还是我需要做类似的事

  • 问题内容: 我正在编写一些Javascript来调整大图像的大小,以适合用户的浏览器窗口。(不幸的是,我没有控制源图像的大小。) 因此,HTML中将包含以下内容: 我是否可以确定 标签中的图像是否已下载? 我需要这样做,因为如果在浏览器加载图像之前执行该命令,就会遇到问题。 并返回占位符的大小(替代文本)。就我而言,这大约是134 x 20。 现在,我只是在检查照片的高度是否小于150,并假设是a

  • 如果docker文件中有RUN命令,那么它会创建一些中间图像。我的问题是,这些中间图像是否占用硬盘的内存?如果是,docker build--rm应该足够了吗?

  • 问题内容: 我在用 我想用bash脚本检查一下,看看是否已挂载?如果不是,则调用上面的mount命令,否则执行其他操作。我怎样才能做到这一点? CentOS是操作系统。 问题答案: 运行不带参数的命令将告诉您当前的安装。在shell脚本中,您可以使用和if语句检查挂载点: 在我的示例中,if语句正在检查的退出代码,该代码指示是否存在匹配项。由于我不希望在匹配时显示输出,因此将其重定向到。