在 Docker 中,--restart=always 和 --restart=unless-stopped 都是用来控制容器在退出时是否自动重启的策略,但它们的触发条件有细微差别:
--restart=alwaysexit 0 或手动停止 docker stop),Docker 都会无条件重启容器。dockerd)本身停止时,容器不会重启(需等待守护进程恢复后才会重启)。--restart=unless-stoppeddocker stop 或 docker rm -f),则 不会自动重启。exit 非0 等),Docker 会自动重启容器。| 场景 | --restart=always |
--restart=unless-stopped |
|---|---|---|
容器进程正常退出 (exit 0) |
✅ 重启 | ✅ 重启 |
容器进程崩溃 (exit 非0) |
✅ 重启 | ✅ 重启 |
手动执行 docker stop |
✅ 重启 | ❌ 不重启 |
| Docker 守护进程重启 | ✅ 重启 | ✅ 重启 |
# always 策略
docker run -d --restart=always nginx
# unless-stopped 策略
docker run -d --restart=unless-stopped nginx
always:适用于 必须保持运行 的服务,即使人为停止也不允许中断。unless-stopped:更灵活,允许人工干预停止后不再重启。