Docker容器重启策略疑问:SIGHUP未触发自动重启及故障重启咨询
Docker容器重启策略相关问题
我给一个已运行的容器设置了always重启策略,期望它在崩溃、系统重启等场景下自动重启,但遇到了以下情况:
- 手动发送SIGHUP信号终止容器后,容器并未自动启动,执行命令及结果如下:
sudo docker kill --signal=SIGHUP 5b61a7735329 5b61a7735329 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 执行重启Docker服务的命令后,容器自动启动,已通过
docker ps验证:
$ sudo systemctl restart docker
现咨询两个问题:
- 为何手动发送SIGHUP信号时容器未自动启动?
- 容器是否会在任意Docker故障时自动重启?
问题解答
1. 手动发送SIGHUP信号容器未自动启动的原因
Docker的always重启策略仅针对容器进程异常退出或Docker守护进程重启/恢复的场景触发,而docker kill --signal=SIGHUP属于用户主动发起的容器终止操作,会被Docker判定为用户主动停止容器,而非进程自身崩溃,因此不会触发重启策略。
简单来说,docker kill是主动停止指令,Docker会记录这个用户操作状态,不会自动重启该容器;只有当容器因自身错误崩溃、异常退出,或者Docker服务重启时,always策略才会生效。
2. 容器不会在任意Docker故障时自动重启
always重启策略的生效依赖Docker守护进程恢复运行:
- 如果Docker守护进程仅出现短暂故障但未退出,容器不会自动重启;
- 只有当Docker守护进程完全退出并重新启动后,才会检查所有设置了
always策略的容器并重启它们; - 若Docker守护进程彻底挂死无法自行恢复,容器自然无法被启动。
另外,若容器是被用户主动停止(比如docker stop、docker kill),即使后续Docker重启,也不会自动启动该容器,需手动启动。
内容的提问来源于stack exchange,提问作者Zama Ques
相关产品推荐
相关产品推荐

