【问题标题】:Restart Docker Container (Automatically) when Image changes in Portainer(?)当 Portainer 中的图像更改时(?)重新启动 Docker 容器(自动)
【发布时间】:2017-05-10 13:03:53
【问题描述】:

我有一个 java WAR 文件,它是一个映像 (Docker),并且正在一个 Tomcat (Docker) 容器内启动。由于编码发生了变化,WAR 也会发生变化。我想做以下事情:

  1. 将java代码更新为Git
  2. 创建一个 WAR 文件(从刚刚推送到 Git 的代码)
  3. 创建一个使用新 WAR 文件的新镜像 (Docker)
  4. 停止所有旧容器(运行旧映像)
  5. 重新启动容器(将使用新映像)

我也在使用 Portainer。是否有一些我可以执行/运行的命令,以便可以自动运行第 4 项和第 5 项(无需人工干预)?有什么方法可以做到这一点吗?

TIA

【问题讨论】:

    标签: image docker containers restart portainer


    【解决方案1】:

    docker-compose 可以对此有所帮助。您可以为您的应用程序创建一个 yml 文件,并根据需要使用 docker compose cli 启动新容器。例如,我有以下 yml 文件的基于 tomcat/mongo 的应用程序:

    version: '3'
    
    services:
      mongodb:
        image: mongo
        network_mode: host
      tomcat:
        build: 
          context: ./app
          dockerfile: DockerfileTomcat
        network_mode: host
        depends_on:
         - mongodb
    

    文件夹布局为:

    ├── docker-compose.yml
    └── app
        ├── DockerfileTomcat
        └── app.war
    

    DockerfileTomcat 负责将 Tomcat 容器中的 war 文件复制为:

    FROM tomcat:8.5-jre8
    
    RUN rm -rf /usr/local/tomcat/webapps/*
    
    COPY app.war /usr/local/tomcat/webapps/app.war
    

    为了启动您的应用程序,您需要在包含docker-compose.yml 的目录中运行以下命令:

    docker-compose up --build
    

    每次只需将新的 war 文件复制到 app.war 上,然后运行上面的命令。它将创建基础镜像并启动更新的容器。

    如果这不是您要寻找的东西,您可以编写一个 BASH 脚本来自动化该过程。如果你想让我把它贴在这里,请告诉我。

    【讨论】:

    • 感谢您的回复!这也适用于 Portainer 吗? (我有点喜欢通过 UI 看到容器运行)。
    • docker compose 与 portainer 尚不支持,但我确实看到 work 正在处理它。详情请见搬运工roadmap
    • 非常感谢您的意见!我将等待新功能 :-) 同时,您认为是否可以通过 cron 作业复制此类功能?
    • @Casey 我们目前正在努力添加“使用最新图像重新启动容器”的功能,这应该很快就会可用!
    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多