docker_restart_policy
修改 Docker 容器重启策略
补充说明
docker_restart_policy 整理原生 Docker 命令与 Docker Compose 两种场景的重启策略修改方案,支持单个容器修改、指定多容器修改、批量所有 Compose 项目修改,命令自带容错,空容器不报错,适配多项目目录结构。
重启策略对比
| 策略 | 说明 | 容器手动停止 | 容器崩溃退出 | Docker 重启 | 系统重启 |
|---|---|---|---|---|---|
| no(默认) | 永不自动重启 | ❌ 不重启 | ❌ 不重启 | ❌ 不重启 | ❌ 不重启 |
| on-failure | 仅异常退出才重启 | ❌ 不重启 | ✅ 自动重启 | ❌ 不重启 | ❌ 不重启 |
| unless-stopped | 除非手动停止,否则永远重启 | ❌ 不重启 | ✅ 自动重启 | ✅ 自动重启 | ✅ 自动重启 |
| always | 无条件永远重启 | ✅ 会重启 | ✅ 自动重启 | ✅ 自动重启 | ✅ 自动重启 |
一、原生 Docker 命令
适用于直接 docker run 部署的容器,可精准指定单个或多个容器修改重启策略。
1.1 修改单个指定容器
支持填写容器 ID 或容器名称。
docker update --restart always 容器ID/容器名
1.2 修改多个指定容器
多个容器名或 ID 用空格分隔批量修改。
docker update --restart always 容器名1 容器名2 容器ID1
二、Docker Compose 项目
适配多文件夹 Compose 部署架构(每个子目录独立一套 docker-compose.yml),精准作用于对应项目容器,不影响全局其他容器。
2.1 修改单个 Compose 项目所有容器
进入目标项目目录,仅修改当前项目内全部容器重启策略。
cd /vol1/1000/compose/项目文件夹名
docker compose ps -q | xargs -r docker update --restart always
2.2 批量修改全部 Compose 项目所有容器
进入总 Compose 根目录,一键遍历所有子项目,批量设置自动重启。
cd /vol1/1000/compose
for d in */; do
cd "$d"
docker compose ps -q | xargs -r docker update --restart always
cd ..
done
三、核心参数说明
--restart always:最高优先级重启策略,容器手动停止除外,无论崩溃、重启系统、Docker 重启,都会自动拉起容器docker compose ps -q:仅输出当前项目容器 ID,纯净参数输出xargs -r:容错核心,无匹配容器时直接跳过命令,杜绝"缺少参数"报错
四、重要补充说明
4.1 临时生效
docker update 仅修改当前已存在容器的运行策略,容器删除后重新 docker compose up -d 后策略失效。
4.2 永久生效方案(推荐)
在对应项目 docker-compose.yml 的 services 下添加配置:
services:
服务名:
image: 镜像名
restart: always
修改后执行 docker compose up -d 即可永久生效。
4.3 一键脚本:sed 批量修改
对已有 restart 配置的项目,直接替换为 always:
# 已有 restart 则替换为 always
sed -i 's/restart:.*/restart: always/' docker-compose.yml
对尚未配置 restart 的项目,在首个服务名下插入:
# 无 restart 则在首个服务下方插入
sed -i '/^ [0-9a-zA-Z_]*:/a \ restart: always' docker-compose.yml
组合使用:先替换已有配置,再补全缺失配置。
# 一键完成:先替换已有,再补全缺失
sed -i 's/restart:.*/restart: always/' docker-compose.yml
sed -i '/^ [0-9a-zA-Z_]*:/a \ restart: always' docker-compose.yml
五、拓展:全局所有容器批量设置
不区分 Compose 项目,全局所有 Docker 容器一键设置自动重启。
docker ps -aq | xargs -r docker update --restart always