docker compose up是否保证重建变更容器前先删除旧容器?
问题描述
当在项目中两次运行docker compose up时,Compose会检测docker-compose.yml文件的变更,判断是否需要重建现有容器。我需要确保Compose绝不会同时运行同一容器的两个副本——根据我的实验,Compose似乎总是在创建并运行新容器前先销毁旧容器,这正是我需要的行为,但我没找到任何文档说明该操作的语义,也没有找到能保证Compose始终遵循此行为的相关内容。请问是否存在相关规范或文档描述该行为并提供此类保证?
解答
Docker Compose的up命令在处理单实例服务的重建需求时,确实会遵循先销毁旧容器、再创建启动新容器的逻辑,这个行为是稳定且可依赖的,核心依据如下:
- Docker本身的容器命名约束:同一Docker环境中不允许存在同名容器,而Compose为单实例服务生成的容器名称是固定的(格式为
[项目名]_[服务名]_1),这从底层杜绝了同名容器共存的可能。 - Compose的更新流程逻辑:当检测到服务配置需要重建时,针对单实例服务会串行执行以下步骤:
- 停止当前运行的旧容器
- 删除该旧容器
- 基于更新后的配置创建并启动新容器
- 若旧容器无法正常停止或删除,Compose会直接报错终止流程,不会强行创建新容器,避免出现新旧容器共存的情况。
虽然官方文档没有将此单独作为一个强保证条目列出,但从Compose“保证运行状态与服务定义一致”的核心设计目标,结合Docker的底层约束来看,这个行为是符合预期且稳定的,可以放心依赖。
内容的提问来源于stack exchange,提问作者Elliot Cameron
相关产品推荐
相关产品推荐

