我创建了两个容器,一个是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 后仍然存在)
--force-recreate
将重新创建容器
--force-recreate => 重新创建容器,即使它们的配置和镜像还没有 改变了。
docker-compose up -d --force-recreate
Compose Up 如果配置更改则重新创建
如果 docker-compose.yml 中的服务规范或环境变量发生更改,即使它们已外部化(.env 文件),Docker compose up 也会重新创建容器。
依赖关系也被重新创建...
如果服务 B 依赖于服务 A,则 docker compose up B 也会重新创建 A(如果其配置/环境也被修改)。
选项
选项“--always-recreate-deps”、“--force-recreate”(即使没有配置更改)和“--no-recreate”(如果容器已经存在,不要重新创建它们)修改默认行为。