docker-compose up down和start stop的区别
这是一个非常实用的问题!docker-compose down/up 和 docker-compose start/stop(注意:没有 start down,应为 start / stop)是两组完全不同层级的操作命令,理解它们的区别对正确管理容器至关重要。
✅ 一、核心区别一句话总结
| 命令组合 | 作用层级 | 是否删除容器? | 是否重建容器? | 典型用途 |
|---|---|---|---|---|
docker-compose up / down | 项目级(Project) | ✅ down 会删除容器 | ✅ up 可能重建 | 开发、部署、彻底重启 |
docker-compose start / stop | 容器级(Container) | ❌ 不删除容器 | ❌ 不重建容器 | 临时暂停/恢复服务 |
🔑 关键:
up/down= 销毁并重建整个应用栈start/stop= 仅启停现有容器,不改变配置
🧩 二、详细对比
1. docker-compose up
作用:
- 创建网络、卷(如果不存在)
- 创建新容器(基于当前
docker-compose.yml) - 启动容器
常用选项:
docker-compose up -d # 后台运行 docker-compose up --build # 强制重新构建镜像何时用:
- 首次启动项目
- 修改了
docker-compose.yml或代码,需要应用新配置
2. docker-compose down
作用:
- 停止并删除容器
- 删除由 Compose 创建的网络
- 默认不删除卷(volumes)(防止数据丢失!)
常用选项:
docker-compose down -v # 同时删除命名卷(⚠️ 数据会丢!) docker-compose down --rmi all # 删除镜像(慎用)后果:
- 下次
up时,所有容器都是全新的 - 如果没加
-v,数据库数据仍在(因卷保留)
- 下次
3. docker-compose start
作用:
- 启动已存在的容器(这些容器必须是由
create或之前up创建的) - 不读取
docker-compose.yml的新内容
- 启动已存在的容器(这些容器必须是由
- 前提:容器必须处于
stopped状态(不能是exited或被删除) 典型场景:
- 临时关闭服务做维护,之后快速恢复
4. docker-compose stop
作用:
- 优雅停止容器(发送 SIGTERM,等待退出)
- 容器状态变为
exited,但未删除
与
kill区别:stop→ 优雅退出(应用可清理资源)kill→ 强制终止(可能丢数据)
🔄 三、生命周期对比图
graph LR
A[首次部署] -->|docker-compose up| B(容器 Running)
B -->|docker-compose stop| C(容器 Exited)
C -->|docker-compose start| B
B -->|docker-compose down| D(容器 Deleted)
D -->|docker-compose up| B⚠️ 注意:
stop→start:配置未更新(即使你改了docker-compose.yml)down→up:总是使用最新配置
🛠️ 四、实际场景举例
场景 1:修改了 n8n 的环境变量
# docker-compose.yml
environment:
- TZ=Asia/Shanghai # 原来是 UTC,现在改了✅ 正确操作:
docker-compose down docker-compose up -d❌ 错误操作:
docker-compose stop docker-compose start # ← 环境变量不会生效!
场景 2:临时关闭 n8n 做系统维护
✅ 正确操作:
docker-compose stop # 保留容器和配置 # ... 维护 ... docker-compose start # 快速恢复
场景 3:彻底重置 n8n(包括工作流数据)
docker-compose down -v # -v 删除卷,数据清空
docker-compose up -d❗ 五、常见误区
| 误区 | 正确理解 |
|---|---|
“start/stop 会应用新配置” | ❌ 只有 up 会读取 docker-compose.yml |
“down 会删掉我的数据库” | ❌ 默认不删卷!加 -v 才删 |
“up 每次都重新拉镜像” | ❌ 除非加 --pull 或镜像 tag 是 latest |
💡 六、最佳实践建议
| 操作 | 推荐命令 |
|---|---|
| 日常重启(配置未变) | docker-compose restart(等价于 stop + start) |
| 更新配置后重启 | docker-compose up -d --force-recreate |
| 彻底清理项目 | docker-compose down -v --rmi local |
| 仅启停服务 | docker-compose start / stop(少用,优先用 restart) |
📌 黄金法则:
只要改了docker-compose.yml或.env文件,就必须用down+up!
✅ 总结表
| 操作 | 容器是否重建 | 配置是否更新 | 数据是否保留 | 速度 |
|---|---|---|---|---|
up / down | ✅ 是 | ✅ 是 | ✅ 卷默认保留 | 较慢 |
start / stop | ❌ 否 | ❌ 否 | ✅ 保留 | 极快 |
掌握这个区别,你就能精准控制 Docker Compose 应用的行为,避免“改了配置却不生效”的经典坑!