假设我有 2 个容器:
composer
和 php
,它们共享相同的代码库,即相同的体积。我想用一个 docker-compose 命令来管理它们,比如 docker-compose up
。
所以问题是如何才能一一启动这些容器,而不是同时启动?我的意思是,仅在
php
容器退出后才启动我的 composer
容器,即 composer
容器应为我的 php
容器安装所有供应商并退出,然后且仅当 php
容器应启动内置已安装供应商的 PHP Web 服务器。
附注现在我得到了两个容器同时启动的行为。所以我的
php
容器正在尝试在没有供应商的情况下启动 Web 服务器,而 composer
容器正在尝试安装这些供应商。
这种情况有好的解决办法吗?
自 2023 年以来,您有一个名为
service_completed_successfully
的 dependent_on 条件的新选项,并且它的工作原理完全符合您的预期(请参阅文档)。
例如,如果您想在单独的容器中运行数据库迁移(您应该这样做以避免并发问题以及尝试多次运行的迁移),您将拥有以下 docker compose 文件:
compose.yaml
:
services:
migrations:
build: .
command: ./run_migrations.sh
depends_on:
db:
condition: service_healthy
restart: true
web:
build: .
depends_on:
db:
condition: service_healthy
restart: true
migrations:
condition: service_completed_successfully
db:
image: postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
retries: 5
start_period: 30s
timeout: 10s