正确配置需将restart字段置于service下级且与image等同级缩进,策略选unless-stopped最稳妥,配合healthcheck可防启动风暴。

直接用 --restart 参数就能设,不用写脚本、也不用改系统服务。关键看业务需求选对策略,而不是一律用 always。
新建容器时设置重启策略
启动容器时加 --restart,必须配合 -d(后台运行)才生效:
-
推荐生产环境用
unless-stopped:宿主机或 Docker 守护进程重启后自动拉起,但你手动执行docker stop后就不会再启,符合运维预期。
示例:docker run -d --restart unless-stopped --name api -p 8000:8000 my-api -
核心服务用
always:哪怕你停过,Docker 一恢复它就立刻起来。适合 etcd、cert-manager 这类不能断的服务,但务必配HEALTHCHECK,否则健康失败也会无限重启。
示例:docker run -d --restart always --health-cmd="curl -f http://localhost/health" --health-interval=10s nginx -
依赖外部服务的用
on-failure:3:只在崩溃(非零退出码)时重试,最多 3 次,避免因数据库连不上等永久问题死循环。
示例:docker run -d --restart on-failure:3 --name app my-app -
默认是
no:不重启,适合 CI 构建、调试或你用 Kubernetes 管生命周期的场景。
已有容器补设策略
不用停容器,Docker 20.10+ 支持实时更新:
- 命令:
docker update --restart unless-stopped my-container - 执行后立即生效,
docker inspect my-container可查配置是否已更新。
让重启真正生效的前提
光设策略不够,还得确保底层支撑到位:
- Docker 守护进程本身要开机自启:
sudo systemctl enable docker - 如果改过 Docker 配置并重启了 daemon,建议开启
live-restore(在/etc/docker/daemon.json加"live-restore": true),避免 daemon 重启时容器中断。 - 对长期服务,建议加
HEALTHCHECK,防止容器“活着但不可用”还被反复拉起。
Docker Compose 中怎么配
在 docker-compose.yml 的服务定义里加 restart 字段:
restart: "unless-stopped"restart: "on-failure:5"restart: "always"- 注意:Compose 不支持
no写法,留空或不写即为默认行为。











