docker
  • docker教程
  • advanced
    • Docker 构建缓存指南
    • Docker清理数据卷(volume prune)
    • Docker分配CPU资源
    • Dockerfile+Maven插件构建SpringBoot镜像(推荐)
    • Dockerfile构建SpringBoot镜像
    • docker-find-volume-container-mapping
    • idea配置docker
    • Docker inspect 检测所有容器挂载状态的脚本
    • Docker inspect 查看容器、镜像的高级用法
    • Docker Jenkins进阶配置
    • 基于jenkins容器部署SpringBoot应用构建镜像(基于Dockerfile+Maven插件构建)
    • Keycloak Docker容器部署文档
    • Keycloak Docker容器部署文档
    • hostname-strict 参数详解
    • docker-keycloak-image
    • docker-keycloak-prod
    • Maven插件构建SpringBoot镜像(二)
    • 基于Maven插件为SpringBoot应用构建镜像并推送到远程_私人仓库(Docker Hub)
    • Maven插件构建SpringBoot镜像(一)
    • Docker MongoDB进阶配置
    • Docker 多阶段构建指南
    • Docker MySql进阶配置
    • Docker network进阶配置
    • Docker Nginx进阶配置
    • Docker清理悬空镜像(空(none)镜像)
    • Docker pip install --no-cache-dir
    • Docker redis进阶配置
    • Docker安全的清理匿名数据卷
    • Docker Bind Mount vs Volume 的区别
  • concepts
    • docker、docker engine和docker desktop区别
    • 架构
    • 什么是容器?
    • 什么是镜像?
    • 什么是Docker?
    • 什么是仓库?
  • docker-compose
    • Docker Compose 锚点的用法
    • docker-compose 编排多服务
    • docker-compose 常用命令
    • docker-compose 部署jenkins
    • docker-compose安装mySql
    • docker-compose网络配置
    • docker-compose安装nginx
    • docker-compose安装redis
    • docker Compose 示例1
  • docker-hub
    • Docker Hub账号服务说明
  • install
    • CentOS Docker 安装
    • Debian Docker 安装
    • Docker 安装 Apache
    • Docker 安装 CentOS
    • Docker 安装 Elasticsearch
    • Docker 安装 GitLab
    • Docker 安装 Jenkins
    • Docker 安装 MongoDB
    • Docker 安装 MySQL
    • Docker 安装 Nginx
    • Docker 安装 Node.js
    • Docker 安装 PHP
    • Docker 安装 Portainer
    • Docker Python 官方镜像使用说明(TAG说明)
    • Docker 安装 Python
    • Docker 安装 Redis
    • Docker 安装 Tomcat
    • Docker 安装 Ubuntu
    • Docker 安装 Wordpress
    • Docker 国内镜像加速
    • MacOS Docker 安装
    • Ubuntu Docker 安装
    • Windows Docker 安装
  • manual
    • Docker attach 命令
    • Docker build 命令
    • Docker 清理命令
    • Docker命令大全
    • Docker commit 命令
    • docker-compose-run-command
    • Docker cp 命令
    • Docker create 命令
    • Docker diff 命令
    • Docker rm 命令
    • Docker exec 命令
    • Docker export 命令
    • Docker history 命令
    • Docker images 命令
    • Docker import 命令
    • Docker info 命令
    • Docker inspect 命令
    • Docker kill 命令
    • Docker load 命令
    • Docker login/logout 命令
    • Docker logs 命令
    • Docker network 命令
    • Docker pause/unpause 命令
    • Docker port 命令
    • Docker 常见问题
    • Docker ps 命令
    • Docker pull 命令
    • Docker push 命令
    • Docker rename 命令
    • docker-resources
    • Docker rm 命令
    • Docker rm 命令
    • Docker run 命令
    • Docker save 命令
    • Docker search 命令
    • Docker start/stop/restart 命令
    • Docker stats 命令
    • Docker tag 命令
    • Docker top 命令
    • Docker version 命令
    • Docker version 命令
    • Docker wait 命令
    • diff
      • Docker Compose 和 docker-compose 区别
      • Docker import、export 与 save、load 命令 区别
  • usage
    • Docker docker-compose 使用
    • Docker 容器连接
    • Docker 容器使用
    • Docker Dockerfile Ptyhon实战配置-1
    • Docker Dockerfile Ptyhon实战配置之多阶段构建-2
    • Docker Dockerfile
    • Docker 镜像使用
    • Docker Machine
    • Docker 仓库管理
    • Docker 重启策略
    • Swarm集群管理
  • assets
    • mysql
      • my.cnf
Powered by GitBook
On this page
  • 各种情况下的默认策略
  • 1. docker run 命令
  • 2. Docker Compose
  • 3. Dockerfile
  • 所有重启策略对比
  • no (默认)
  • always
  • on-failure
  • unless-stopped
  • 实际测试各种策略
  • 默认策略测试
  • 对比其他策略
  • 生产环境建议
  • 不同环境的策略选择
  • 验证当前策略
  • 查看容器的重启策略
  • Docker Compose 中查看
  • 总结

Was this helpful?

  1. usage

Docker 重启策略

Docker 和 Docker Compose 的默认重启策略是 no,也就是不重启。

各种情况下的默认策略

1. docker run 命令

# 默认情况
docker run your-image
# 等同于
docker run --restart=no your-image

2. Docker Compose

services:
  app:
    image: your-image
    # 默认 restart: "no" (不重启)

3. Dockerfile

# Dockerfile 中无法设置重启策略
# 重启策略只能在运行时设置

所有重启策略对比

no (默认)

restart: "no"  # 注意要用引号,因为 no 是 YAML 关键字
  • ✅ 任何情况下都不重启

  • ❌ 进程崩溃后容器停止

always

restart: always
  • ✅ 总是重启,除非手动停止

  • ✅ Docker 守护进程重启后也会重启

  • ❌ 即使手动停止也会重启(除非 docker stop)

on-failure

restart: on-failure
# 或指定最大重试次数
restart: on-failure:3
  • ✅ 只在非正常退出时重启(退出码非0)

  • ❌ 正常退出(退出码0)不重启

unless-stopped

restart: unless-stopped
  • ✅ 总是重启,除非手动停止

  • ❌ 手动停止后不会重启

实际测试各种策略

默认策略测试

# 创建一个会崩溃的容器
docker run --name test-default alpine sh -c "sleep 5; exit 1"

# 5秒后容器退出,不会重启
docker ps -a  # 状态显示 Exited (1)

对比其他策略

# always 策略
docker run --restart=always --name test-always alpine sh -c "sleep 5; exit 1"
# 5秒后退出,然后立即重启,无限循环

# on-failure 策略
docker run --restart=on-failure:3 --name test-failure alpine sh -c "sleep 5; exit 1"
# 5秒后退出,重启,最多重试3次

# unless-stopped 策略
docker run --restart=unless-stopped --name test-unless alpine sh -c "sleep 5; exit 1"
# 5秒后退出,然后重启,直到手动停止

生产环境建议

services:
  crawl4ai:
    build: .
    restart: unless-stopped  # 推荐:意外崩溃重启,手动停止不重启
    
  redis:
    image: redis:7-alpine
    restart: unless-stopped  # 同样策略保持一致

不同环境的策略选择

开发环境:

restart: "no"  # 方便调试,崩溃后不重启

测试环境:

restart: on-failure:3  # 允许一定次数的重试

生产环境:

restart: unless-stopped  # 平衡自动恢复和手动控制

验证当前策略

查看容器的重启策略

# 查看运行中的容器
docker inspect <container-name> | grep -A 3 "RestartPolicy"

# 输出示例:
# "RestartPolicy": {
#     "Name": "unless-stopped",
#     "MaximumRetryCount": 0
# }

Docker Compose 中查看

docker-compose config
# 会显示完整的配置,包括默认值

总结

关键信息:

  • 默认策略: no (不重启)

  • 推荐生产策略: unless-stopped

  • 开发调试: 保持默认 no

  • 如果不设置: 容器崩溃后就停止,需要手动重启

PreviousDocker 仓库管理NextSwarm集群管理

Last updated 1 day ago

Was this helpful?