Docker 不支持通过 daemon.json 设置全局默认重启策略,--restart=no 是硬编码默认值,不可更改;必须在 docker run 或 docker-compose.yml 中显式指定 restart 策略,如 always、on-failure 或 unless-stopped。

Docker 本身不提供全局默认重启策略的配置项,也就是说,你无法通过修改 Docker daemon 配置(如 /etc/docker/daemon.json)来让所有新创建的容器默认使用 always 或 on-failure 等策略。--restart=no 是硬编码的默认行为,由 Docker 引擎内置决定,不可更改。
所以“设置默认重启策略”实际指的是两种可行路径:
容器启动时显式指定重启策略
这是最常用、最可靠的方式。每次运行容器时,主动加上 --restart 参数:
-
--restart=always:适合长期运行的服务(如 Nginx、PostgreSQL) -
--restart=on-failure:3:适合可能偶发失败但不该无限重启的任务(如批处理作业) -
--restart=unless-stopped:适合希望随宿主机启动、且人工停止后不再自启的场景
示例:
docker run -d --restart=always --name mydb postgres:15
在 docker-compose.yml 中统一约定
如果你用 Compose 编排服务,可在 docker-compose.yml 里为每个服务明确写 restart:,并把它当作团队规范或模板的一部分:
version: '3.8'
services:
api:
image: my-api:latest
restart: always
worker:
image: my-worker:latest
restart: on-failure:5⚠️ 注意:即使没写
restart字段,Docker Compose 也默认按no处理,不会继承其他服务的策略,也不支持default_restart:这类全局字段。
对已有容器更新重启策略(有限支持)
Docker 不允许直接修改运行中或已停止容器的 --restart 策略。唯一办法是:
-
docker commit当前容器为新镜像(不推荐,破坏不可变性) - 更稳妥的做法:
docker stop && docker rm原容器,再用带--restart的docker run重建
(部分用户误以为 docker update --restart=always <container> 可行,但该命令已被弃用且实际无效——自 Docker 20.10 起,docker update 不再支持修改重启策略)
小结关键点
- Docker 没有
daemon.json可设的全局 restart 默认值 -
no是强制默认,无法绕过,只能每次显式覆盖 - 自动化部署脚本、CI/CD 流程或 Compose 文件中,应把
restart:当作必需字段来声明 - 生产环境建议:核心服务用
always或unless-stopped;临时任务用no或on-failure
不复杂但容易忽略。


















