Docker容器自启动策略

2026-07-22 12:06:00
690字
3.8分钟
Docker容器自启动策略是指Docker服务运行期间,特定容器在退出、崩溃或宿主机重启后,容器是否自动重新运行。

1. Docker容器自启动

确保 Docker 服务自启后,还需要为每个容器单独设置策略,告诉 Docker 在服务启动或重启时如何处理它们。最推荐的方式是使用 Docker 自带的--restart策略。这里有几种常用策略:

  • no:默认值。容器退出后不会自动重启。
  • always:容器总会自动重启,无论退出原因是什么。
  • unless-stopped:除非手动停止,否则容器总会自动重启。这是最常用的策略。
  • on-failure:仅在容器因错误非正常退出时重启,并可指定最大重试次数

unless-stoppedalways 在容器运行期间的行为完全一致(即容器因崩溃、报错退出时,都会自动重启),它们唯一的区别在于:Docker 服务重启后,是否恢复一个被手动停止的容器。

场景always 策略unless-stopped 策略
容器运行中崩溃✅ 自动重启✅ 自动重启
手动执行 docker stop 停止❌ 立即停止,不会重启❌ 立即停止,不会重启
系统重启 / Docker 服务重启后✅ 强制启动(即使你之前手动停止了它,也会自动启动)❌ 保持停止(你手动停过,系统重启后就不会自动起来)

2. 推荐容器启动策略

为什么推荐用 unless-stopped

在绝大多数生产环境和日常开发中,unless-stopped 是最佳实践。

  • 尊重用户意图: 你手动停掉它,说明你不想让它运行,系统重启后也不应该违背你的意愿强制启动。
  • 避免冲突: 如果容器依赖某些外部挂载卷,手动停止是为了修复数据,重启后强制起来可能会造成文件占用或数据损坏。

什么场景用 always?

只有在极少数需要“死缠烂打、无论如何都要跑起来”的核心基础服务(比如日志收集客户端、监控探针)才用 always,确保即使误操作停止了,机器一重启它也会立刻恢复。

3. 配置容器启动策略

  1. 创建新容器时指定:在 docker run 命令中使用 --restart 参数
# 创建一个无论什么原因退出都会自动重启的 Nginx 容器
docker run -d --restart unless-stopped --name nginx nginx
  1. 修改已有容器: 对已存在的容器,使用 docker update 命令更新策略
# 为名为 my-nginx 的容器设置重启策略
docker update --restart unless-stopped my-nginx
  1. 在 Docker Compose 中配置 如果你的应用由多个容器组成,可以在 docker-compose.yml 文件中配置
services:
    web:
        image: nginx
        restart: unless-stopped  # 在此处设置重启策略
        ports:
            - "80:80"

保存后,使用 docker compose up -d 启动服务即可。

最后更新时间: 2026-07-22 12:42:00
2022-2026 小紫念沁 版权所有