docker容器重启策略通过--restart参数直接配置,无需脚本或外部监控;四种策略为no(默认不重启)、on-failure[:max](仅非零退出时重试)、always(任何退出都重启)、unless-stopped(手动停止前始终重启),分别适用于一次性任务、批处理、核心服务及生产常驻服务。

直接用 --restart 参数就能配,不用写脚本、也不依赖外部监控。关键看业务需要——是希望“手动停了就真停”,还是“无论如何都要拉起来”。
新建容器时设置重启策略
启动容器时加 --restart 选项,必须搭配 -d(后台运行)才生效:
-
推荐生产环境用
unless-stopped:宿主机或 Docker 守护进程重启后自动恢复,但你执行过docker stop就不再自启,运维可控docker run -d --restart unless-stopped --name web -p 80:80 nginx -
绝对不能断的服务用
always:哪怕你手动 stop 过,只要 Docker daemon 启动,它就复活。务必配合HEALTHCHECK,否则健康失败也会无限重启docker run -d --restart always --health-cmd="curl -f http://localhost/health" --health-interval=30s myapp -
有外部依赖(比如数据库连不上)用
on-failure:3:只在崩溃(非零退出码)时重试,最多 3 次,防死循环docker run -d --restart on-failure:3 --name api my-api-service -
一次性任务或 CI 用
no(默认值):跑完就结束,不重启
Docker Compose 中配置
在 docker-compose.yml 的服务定义里加 restart 字段:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
version: '3.8'
services:
db:
image: postgres:15
restart: unless-stopped
app:
image: myapp:latest
restart: on-failure:5
执行 docker compose up -d 即生效,策略会持久化到容器配置中。
已有容器补设策略
不用停容器,Docker 20.10+ 支持热更新:
- 把正在运行的容器改成
unless-stopped:docker update --restart unless-stopped my-running-container - 验证是否生效:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' my-running-container
确保策略真正生效的两个前提
光设策略还不够,得让底层支撑住:
-
Docker 服务本身要开机自启:运行
sudo systemctl enable docker,否则宿主机重启后 Docker 都没起来,容器自然不会动 -
容器启动逻辑要健壮:比如应用连不上数据库就直接 exit 1,那
on-failure才能触发;如果它卡住不动但进程还在,重启策略不会响应










