restart: unless-stopped 代表什么意思

在 Docker 中,restart: unless-stopped 是一种容器重启策略,用于控制容器在退出或宿主机重启后的行为。以下是详细解释:


unless-stopped 的含义
• 定义:

当容器 非人为主动停止 时(例如进程崩溃、系统重启等),Docker 会自动重启该容器。
如果容器是被 手动停止(如执行 docker stopdocker-compose stop),则不会自动重启。


与其他重启策略的对比

策略行为
no不自动重启容器(默认行为)
on-failure仅在容器以 非0状态码退出 时重启(可指定最大重启次数,如 on-failure:5
always无论退出状态如何(包括手动停止后),Docker 服务重启时都会自动重启容器
unless-stopped自动重启容器,除非容器被显式停止(最常用的生产环境策略)

使用场景示例
场景 1:容器因异常退出
• 容器因程序错误(如崩溃、OOM)退出 → 自动重启。

场景 2:宿主机重启
• 宿主机重启后,Docker 服务恢复 → 自动重启容器。

场景 3:手动停止容器
• 执行 docker stopdocker-compose stop → 不会自动重启。


配置方法
docker-compose.yml

services:
  myapp:
    image: nginx
    restart: unless-stopped  # 应用重启策略

docker run 命令中

docker run -d --restart=unless-stopped nginx

验证行为

  1. 手动停止容器:

    docker stop my-container
    # 查看容器状态(不会自动重启)
    docker ps -a | grep my-container
    
  2. 模拟异常退出:

    # 强制终止容器进程(触发非0退出)
    docker kill --signal=SIGKILL my-container
    # 查看容器状态(自动重启)
    docker ps | grep my-container
    

注意事项
• 与 always 的区别:

若容器被手动停止后,重启 Docker 服务(如 systemctl restart docker),always 会重新启动容器,而 unless-stopped 不会。

• 日志与调试:

频繁重启的容器可能是程序存在缺陷,可通过 docker logs --tail=100 my-container 检查日志。


总结
restart: unless-stopped 是 平衡可靠性与可控性 的最佳实践策略,适用于需要长期运行的服务(如 Web 服务器、数据库),同时允许运维人员在维护时通过手动停止容器避免干扰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的土拨鼠呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值