Docker 20.10+ 支持通过 /etc/docker/daemon.json 设置 default-restart-policy(仅 no、on-failure、unless-stopped),修改后需重启 dockerd,新容器自动继承,旧容器需 docker update 单独设置。
在 docker 中,通过 /etc/docker/daemon.json 设置默认容器重启策略,能让所有新创建的容器自动继承该策略,无需每次运行都加 --restart 参数。
配置 default-restart-policy
编辑或新建 /etc/docker/daemon.json,加入 "default-restart-policy" 字段:
{
"default-restart-policy": "unless-stopped"
}
支持的值只有三个:no、on-failure、unless-stopped(always 不被允许作为默认策略)。
-
unless-stopped:最常用,容器随 dockerd 启动而自动运行,且不会因手动docker stop被“记住”为停止状态;只有执行docker update --restart=no或显式docker stop+ 重启 dockerd 后才不拉起 -
on-failure:仅对异常退出(非零退出码)生效;不能带重试次数(如on-failure:5是非法的),因为 daemon 级默认策略不支持参数 -
no:等效于不设该字段,即默认不重启
生效前提与验证方式
修改后必须重启 Docker 守护进程才能生效:
sudo systemctl daemon-reloadsudo systemctl restart docker
验证是否加载成功:
- 运行一个新容器:
docker run -d --name test-alpine alpine sleep 30 - 检查其重启策略:
docker inspect test-alpine | jq '.[0].HostConfig.RestartPolicy' - 输出应为
{"Name":"unless-stopped","MaximumRetryCount":0}(即使没写--restart)
注意事项
这个设置只影响后续新创建的容器,不影响已存在的容器。已有容器需用 docker update 单独设置:
docker update --restart=unless-stopped <container_id>- 若想统一更新全部运行中容器,可配合
docker ps -q批量执行
另外,default-restart-policy 是 Docker 20.10+ 版本才支持的特性,旧版本会忽略该字段。


















