【问题标题】:Jenkins inside docker loses configuration when container is restarted容器重新启动时,docker内部的Jenkins会丢失配置
【发布时间】:2021-03-26 08:52:59
【问题描述】:

我已经按照下一个指南https://hub.docker.com/r/iliyan/jenkins-ci-php/ 使用 Jenkins 下载了 docker 映像。

当我使用docker start CONTAINERNAME 命令启动我的容器时,我可以从localhost:8080 访问 Jenkins。

当我更改 Jenkins 配置并使用 docker stop CONTAINERNAMEdocker start CONTAINERNAME 重新启动 Jenkins 时出现问题,我的 Jenkins 不包含我之前的任何配置更改..

如何持久化 Jenkins 配置?

【问题讨论】:

    标签: jenkins docker


    【解决方案1】:

    您需要将 Jenkins 配置挂载为卷,-v 标志将为您完成此任务。 (在我的示例中,您可以忽略 --privileged 标志,除非您计划在 jenkins docker 镜像中构建 docker 镜像)

    docker run --privileged --name='jenkins' -d -p 6999:8080 -p 50000:50000 -v /home/jan/jenkins:/var/jenkins_home jenkins:latest
    

    -v 标志会将您的 /var/jenkins_home 挂载到您的容器之外的 /home/jan/jenkins 中,在重建之间维护它。

    --name,这样你就有一个固定的容器名称来启动/停止它。

    那么下次你想运行它时,只需调用

    docker start jenkins
    

    【讨论】:

    • 好的,我知道了。但是我没有使用我的 ssh 密钥执行此操作,并且当我重新启动容器时这些密钥仍然存在。您如何在 dockerfile 中指定:忽略此文件夹?或者......为什么詹金斯文件夹被忽略?为什么我的密钥仍然存在?它在哪里指定?
    • 您对容器所做的任何更改都将保留在那里,直到您重建它或构建一个新的,包括您的 ssh 密钥和 jenkins 配置。为了让它在重建之间也能存活,您需要将这些目录挂载到容器之外。如果您的 jenkins 配置在重新启动之间消失,我将需要有关您的设置的更多信息(例如,如果您的用户对目录具有写入权限等)。如果挂载后它仍然消失并且您可以在挂载的目录中看到它,那么显然是在启动时删除了它。
    【解决方案2】:

    我的理解是init脚本

    /sbin/tini -- /usr/local/bin/jenkins.sh
    

    在启动时在通过 JENKINS_HOME 环境变量, 是否安装在 docker vm 之外。

    但可以使用将配置存储在 github 上 配置/“配置系统”/“SCM 同步配置”/Git 部分。

    查看可能的详细配置here

    【讨论】:

      【解决方案3】:

      你可以使用这个 docker-compose 文件:

      version: '3.1'
      services:
      
        jenkins:
          image: jenkins:latest
          container_name: jenkins
          restart: always
          environment:
            TZ: GMT
          volumes:
            - ./jenkins_host:/var/jenkins_home
          ports:
            - 8080:8080
          tty: true
      

      您只需要与主机文件夹共享 jenkins 卷 ./jenkins_host:/var/jenkins_home

      【讨论】:

        【解决方案4】:

        除了显而易见的,比如清除应该禁用的图像的运行参数,您还可以做一些事情:

        • 使用 docker commit 并重用已提交的容器

        • 使用 docker 卷将写入的部分挂载到本地文件系统

        • 我最喜欢的:使用命令:

          docker 容器重启容器名

        根据您的需要,您可以选择一个。 例如,我在测试 jenkins 插件时使用后者,它保留了里面的数据。 后者的来源也可用于更新: https://jimkang.medium.com/how-to-start-a-new-jenkins-container-and-update-jenkins-with-docker-cf628aa495e9

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-01
          • 2019-10-28
          • 1970-01-01
          • 2020-08-28
          • 2016-08-17
          • 1970-01-01
          • 2020-01-21
          • 1970-01-01
          相关资源
          最近更新 更多