Docker compose在停止/关闭目标容器时不尊重dependens_on



我有我的docker-compose.yml类:

version: '3.9'
services:
app:
image: whatever:latest
ports:
- "8081:8080"
healthcheck:
test: "curl -s http://localhost:8080/q/health | grep -q '"status": "UP"'"
interval: 5s
timeout: 5s
retries: 20
app-monitor:
image: whatever:latest
depends_on:
app:
condition: service_healthy

这在docker-compose up -d上运行得非常好。但有一个问题,复制步骤:

  1. docker-compose up -d
  2. docker-compose stop app
  3. docker-compose start app-monitor(正在启动应用程序监视器…已完成(

步骤3不是失败了吗?如果dependent_on目标服务关闭,我如何使服务app-monitor失败?

我在这里的目的是确保所有docker compose服务始终处于启动和运行状态,在bash中看起来像:

if ! docker-compose start app-monitor &> /dev/null; then
docker-compose down && docker-compose up -d
fi

docker-compose stop使容器处于异常状态,即容器存在但其进程未运行。反过来,docker-compose start只对处于这种异常状态的容器有用。由于start没有创建新的容器,所以它不检查depends_on:约束;假设在CCD_ 11时间创建容器时已经满足了这些约束。

在实践中,我几乎从不使用docker-compose stopstart。(与使用kill -STOPkill -CONT管理非容器服务器进程相比,而不是要求初始化系统停止或重新启动服务。(

在正常操作中,我通常会依靠docker-compose up -d来做正确的事情。您不应该手动启动或停止容器,只需运行up即可。如果容器不处于docker-compose.yml文件中描述的状态,则Compose会使其处于这种状态,必要时可能会删除并重新创建容器。

# make sure all services are up and running
docker-compose up -d  # no explicit `docker-compose start` or `down`
# update images if necessary
docker-compose pull && docker-compose up -d
# restart the app-monitor
docker-compose up -d --force-recreate app-monitor

最新更新