在Docker Compose中,restart
是一个容器重启策略配置项,用于控制容器退出时Docker守护进程的行为。restart: unless-stopped
属于以下类型:
1. 重启策略类型
Docker支持四种主要的重启策略:
no
:默认值,不自动重启容器(即使容器非正常退出)。always
:无论容器因何原因退出(正常或异常),Docker都会自动重启它。on-failure
:仅当容器以非零退出状态码(即异常退出)时才重启,可以通过on-failure:3
指定最多重启次数。unless-stopped
:除非用户手动停止容器(如docker stop
或docker-compose down
),否则Docker会在容器退出时自动重启它。即使Docker守护进程重启后,容器也会被重新启动。
2. unless-stopped
的特点
- 自动恢复:容器因错误崩溃或Docker守护进程重启时,容器会自动启动。
- 手动干预优先:如果用户手动停止容器,Docker不会自动重启,直到用户显式启动(如
docker start
或docker-compose up
)。 - 适合长期运行的服务:如数据库、微服务注册中心(如Nacos)等需要保持高可用性的应用。
3. 与其他策略的对比
策略 | 异常退出(非零码) | 正常退出(零码) | 手动停止后重启 | Docker重启后重启 |
---|---|---|---|---|
no | ❌ | ❌ | ❌ | ❌ |
always | ✅ | ✅ | ✅ | ✅ |
on-failure | ✅ | ❌ | ❌ | ✅(如果之前异常退出) |
unless-stopped | ✅ | ✅ | ❌ | ✅ |
4. 在您的配置中的作用
在您的Nacos配置中,restart: unless-stopped
确保:
- Nacos服务在意外崩溃时自动恢复。
- 当您执行
docker-compose down
停止服务时,Nacos不会自动重启,便于维护。 - Docker守护进程重启(如宿主机重启)后,Nacos会自动启动。
5. 使用建议
- 生产环境:对于关键服务(如注册中心、数据库),推荐使用
unless-stopped
或always
确保高可用性。 - 开发环境:如果需要频繁手动控制容器状态,可使用
no
或on-failure
避免干扰调试。
希望这能帮助您理解 restart
策略的类型和用途!