Docker 容器常用重启策略与服务自恢复配置

使用 Docker 部署服务时,容器异常退出、Docker 服务重启或服务器重启后,服务是否能自动恢复, 取决于容器的 restart policy。合理设置重启策略,可以减少人工干预。

一、常见重启策略

  • no:默认策略,容器退出后不自动重启。
  • always:只要容器停止,就自动重启;Docker 服务启动时也会恢复容器。
  • unless-stopped:类似 always,但如果是手动停止,Docker 重启后不会自动拉起。
  • on-failure:只有容器异常退出时才重启,可以限制重试次数。

二、新建容器时设置重启策略

例如部署一个 Nginx 容器,并设置为 unless-stopped:

docker run -d \
  --name web-demo \
  --restart unless-stopped \
  -p 8080:80 \
  nginx:latest

这种策略比较适合长期运行的普通服务。手动停止后不会因为 Docker 重启而再次自动启动。

三、修改已有容器的重启策略

如果容器已经创建,也可以直接更新重启策略。

docker update --restart unless-stopped web-demo

查看容器当前配置可以使用:

docker inspect web-demo | grep -A 5 RestartPolicy

四、on-failure 的使用场景

如果只希望服务异常退出时重启,可以使用 on-failure,并限制最大重启次数。

docker run -d \
  --name worker-demo \
  --restart on-failure:5 \
  my-worker-image:latest

这种方式适合任务型服务,避免程序因为持续错误而无限重启。

五、注意事项

  • 重启策略不能代替日志分析。容器反复重启时,应检查应用日志。
  • 数据库类服务需要注意数据卷挂载,避免数据随容器删除而丢失。
  • 如果服务依赖其他容器,应配合健康检查或启动顺序设计。
  • 云服务器还需要确认 Docker 服务本身已设置为开机自启。
sudo systemctl enable docker
sudo systemctl status docker

总结

对普通长期服务,常用策略是 unless-stopped。 对希望无条件恢复的服务,可以使用 always。 对任务型程序或容易异常退出的程序,可以考虑 on-failure 并限制次数。