Docker Compose主容器退出后依赖容器未停止?问题排查
问题原因
你用的docker compose run命令本质是单独启动指定服务的临时容器,--rm参数只对这个临时创建的shop-server容器生效,不会关联处理depends_on中定义的依赖服务。
当你执行run命令时,Docker Compose会自动启动shop-db(因为depends_on规则),但这个shop-db是作为常规的持久化服务容器启动的,不属于run创建的临时容器组,所以当你退出shop-server临时容器后,shop-db会继续运行,不会被自动移除。
解决方案
根据你的使用场景,有几种处理方式:
场景1:希望主容器退出后所有依赖自动停止并清理
改用docker compose up命令启动,配合参数让所有容器在主容器退出后停止,之后再完成清理:# 启动服务,当shop-server退出时所有容器同步停止 docker compose up --build --exit-code-from shop-server shop-server # 清理所有容器、网络,如需清理持久化卷可追加 -v 参数 docker compose down --remove-orphans或者用
--abort-on-container-exit参数,只要任意容器退出就停止所有服务:docker compose up --build --abort-on-container-exit shop-server docker compose down --remove-orphans场景2:坚持用run命令临时调试,用完手动清理依赖
退出shop-server后,手动停止并移除shop-db容器:docker compose stop shop-db # 如需直接删除容器可改用 rm 命令 docker compose rm -f shop-db补充:关于持久化卷
你的shop-db配置了postgres_data持久化卷,即使停止/删除容器,数据库数据也会保留,下次启动会自动复用。如果需要彻底清理数据,可在down命令后加-v参数:docker compose down -v
内容的提问来源于stack exchange,提问作者zdeneklapes
相关产品推荐
相关产品推荐

