docker compose up -d --build和 docker compose down & docker compose up -d 区别
两者的最终效果都能让容器“重新运行”,但过程和适用场景不同,尤其是在是否重新构建镜像和是否删除已有容器这两点上差别明显:
1️⃣ docker compose up -d --build
- 作用: 先检查镜像是否需要重建。 如果 Dockerfile 或构建上下文的文件有变化,会执行 docker build 重新构建镜像。 如果镜像没变,就直接使用现有镜像。 启动容器: 如果容器已经存在,会尝试复用容器并更新配置(相当于“替换”)。 会对比 docker-compose.yml 是否有变化,如果有差异则重新创建容器,否则直接复用。
- 不会删除旧容器网络卷,除非有配置变化导致必须重建。
- 常用场景: 修改了代码或 Dockerfile,需要重新打包镜像并更新容器。 只是想“热更新”而不想中断数据卷或网络。
2️⃣ docker compose down && docker compose up -d
这是两条命令的组合,效果可以拆开理解:
- docker compose down 停止并删除容器、默认网络、匿名卷(不带 --volumes 时不会删除命名卷)。 镜像不会被删除。
- docker compose up -d 使用现有镜像直接创建全新的容器。 不会自动重新构建镜像,除非本地镜像不存在。 因为 down 删除了容器,所有容器都会是“全新”的(网络、匿名卷会重建)。
- 常用场景: 想要彻底“干净”地重启环境(容器状态、网络、匿名卷全部清除)。 配置文件或依赖关系大改,需要全新容器网络环境。 排查因为容器残留导致的问题。
🔑 核心差异对比
| 特性 | up -d --build |
down && up -d |
|---|---|---|
| 镜像构建 | 重新构建(若有变化) | 不会重建镜像 |
| 容器重建 | 只在配置或镜像变化时重建,否则复用 | 直接删除旧容器再新建 |
| 数据卷 | 命名卷保留 | 命名卷保留;匿名卷会被删除 |
| 网络 | 保留并复用 | 默认网络会被删除并重建 |
| 停机时间 | 容器重建时有短暂停机 | down 到 up 期间完全停机 |
| 适合 | 代码/镜像更新 | 环境彻底重启、清理残留 |
🏁 简单总结
- 快速更新镜像和容器 → docker compose up -d --build 改了 Dockerfile 或代码时用它最方便。
- 彻底清理后重建 → docker compose down && docker compose up -d 网络/容器有脏数据或需要干净环境时用它。
如果你的需求是仅重新构建镜像并重启容器:
👉 推荐 docker compose up -d --build
如果需要彻底清理所有容器与网络,再重新部署:
👉 推荐 docker compose down && docker compose up -d
docker compose up -d --build和 docker compose down & docker compose up -d 区别
/archives/008-docker-compose-up-d-buildhe-docker-compose-down---docker-compose-up-d-qu-bie