返回
创建于
状态
公开

在使用 docker-compose up 时,默认情况下,即使你从 docker-compose.yml 文件中删除了某个服务,Docker 也不会自动删除已经在运行的旧容器。这些遗留的容器会继续运行或停留在系统中。

若要同步配置文件并移除那些不再定义的容器,你需要使用 --remove-orphans 参数。


核心命令

bash
1docker compose up -d --remove-orphans

参数详解

  • up: 启动并运行服务。
  • -d: 后台运行(Detached mode)。
  • --remove-orphans: 关键参数。它会检查当前项目(Project)中正在运行的容器,如果某个容器对应的服务在当前的 docker-compose.yml 中找不到,就会将其删除。

其他相关操作

如果你不想立即启动服务,只是想清理掉那些“孤儿”容器,或者想彻底重置,可以参考以下场景:

1. 仅停止并移除不在配置文件中的服务

虽然 up 命令最常用,但有时你可能想先清理:

bash
1# 这种方式通常配合 up 使用,Compose 没有单独的 "remove-orphans" 独立命令

2. 彻底清理并重新启动

如果你希望确保环境绝对纯净,可以先停止所有服务并移除:

bash
1docker compose down --remove-orphans
2docker compose up -d

3. 为什么会出现“孤儿”容器?

  • 修改了服务名称:例如将 db 改名为 postgres_db,旧的 db 容器就变成了孤儿。
  • 删除了服务定义:直接在 YAML 中删掉了整个 services 下的某一项。