docker-compose up 不重新创建容器

问题描述 投票:0回答:4

我创建了两个容器,一个是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.war必须每次运行命令时都会部署)。

这很正常,或者我错过了什么。

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

更新

因此,up重新创建容器但仅在发生更改时才执行此操作是不正确的吗?

我还看到

docker-compose down
删除容器并强制
up
重新创建它们,是正确的方法吗? 我不明白的是为什么每次停止容器时都会保存容器的状态(由 tomcat 创建的文件 app.pid 在简单的 up 没有之前的 down 后仍然存在)

docker docker-compose containers
4个回答
2
投票

是的,这正如预期。

听起来您想要进行重新启动

docker-compose restart

或强制重建:

docker-compose --build start

2
投票

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


2
投票

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

来自文档

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

docker-compose up -d --force-recreate

0
投票

Compose Up 如果配置更改则重新创建

如果 docker-compose.yml 中的服务规范或环境变量发生更改,即使它们已外部化(.env 文件),Docker compose up 也会重新创建容器。

依赖关系也被重新创建...

如果服务 B 依赖于服务 A,则 docker compose up B 也会重新创建 A(如果其配置/环境也被修改)。

选项

选项“--always-recreate-deps”、“--force-recreate”(即使没有配置更改)和“--no-recreate”(如果容器已经存在,不要重新创建它们)修改默认行为。

https://docs.docker.com/reference/cli/docker/compose/up/

© www.soinside.com 2019 - 2024. All rights reserved.