【问题标题】:docker-compose up not recreate containerdocker-compose up 不重新创建容器
【发布时间】:2018-11-06 11:50:15
【问题描述】:

我创建了两个容器,一个是 oracle db,一个是 apache tomcat。

我使用以下 docker compose 运行它们:

version: '3.4'
services:
  tomcat:
     build: ./tomcat/.
     ports:
       - "8888:8080"
       - "59339:59339"
     depends_on:
       - oracle
     volumes:
       - ./tomcat/FILES:/usr/test/FILES
       - ./ROOT.war:/opt/tomcat/webapps/ROOT.war
     expose:
       - "8888"
       - "59339"
   oracle:
     build: ./database/.
     ports:
       - "49161:1521"
     environment:
       - ORACLE_ALLOW_REMOTE=true
     expose:
       - "49161"

我使用命令 docker-compose up ,根据文档,它必须重新创建容器。

但实际上它只启动旧容器(相同的容器 ID)和容器停止时的状态,这是一个问题,因为我将它用于测试并且我想从一个干净的情况开始(ROOT.每次运行命令时都必须部署战争)。

这很正常,否则我错过了什么。

我正在为 windows 18.06.1-ce 和 Compose 1.22.0 使用 docker

更新

所以 up 重新创建容器,但只有在发生变化时才这样做,这不是真的吗?

我还看到docker-compose down 删除了容器并强制up 重新创建它们,是正确的方法吗? 我不理解的事情是为什么每次我停止它时都会保存容器的状态(由tomcat创建的文件 app.pid 在简单的 up 之后仍然存在而没有上一个向下)

【问题讨论】:

    标签: docker docker-compose containers


    【解决方案1】:

    docker-compose 启动和停止容器,如果您想在每次必须按照 docs 传递 --force-recreate 标志时重新创建它们。

    【讨论】:

      【解决方案2】:

      是的,这是预期的。

      听起来你想做一个restart

      docker-compose restart
      

      或强制重建:

      docker-compose --build start
      

      【讨论】:

        【解决方案3】:

        --force-recreate 将重新创建容器

        From Docs

        --force-recreate => 重新创建容器,即使它们的配置和镜像还没有 改变了。

        docker-compose up -d --force-recreate
        

        【讨论】: