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 并限制次数。