Docker/Docker Compose随机停止重启所有容器问题排查咨询
根因初步判断
从你提供的两类容器日志可直接确认:容器并非因内部服务故障、内存溢出、存储不足崩溃退出,而是收到了宿主机层面的主动停止信号后执行优雅关闭,后续因容器配置的重启策略被自动拉起。
PostgreSQL日志中received fast shutdown request、Nginx日志中signal 3 (SIGQUIT) received, shutting down都是外部触发停止的明确特征。
可能的触发原因
- 宿主机未排查到的定时任务
你仅核查了当前用户的crontab存在遗漏,需检查全系统定时规则:- 系统级crontab路径:
/etc/crontab、/etc/cron.d/目录下所有文件、/etc/cron.hourly/等周期任务目录 - 所有用户的crontab:执行
for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done批量排查 - systemd定时器:执行
systemctl list-timers --all排查,这类定时任务不会出现在crontab列表中,极易被遗漏
- 系统级crontab路径:
- Docker守护进程重启
检查Docker daemon运行日志,执行命令:journalctl -u docker.service --since "2021-10-05 10:00" --until "2021-10-05 10:30"
如果Docker daemon在对应时间点发生重启,且未开启live-restore配置,会默认停止所有运行中容器,daemon恢复后按容器重启策略自动拉起容器。 - 第三方运维/管控工具触发
如果宿主机接入了以下类型的工具,需排查对应规则:- 自动化运维平台的定时执行任务、资源自愈规则
- 容器自动更新工具的镜像更新规则
- 云服务商的容器实例健康检查、自动修复策略
- 主机入侵检测、安全审计工具的处置规则
- 系统定时更新任务
部分系统默认开启的包自动更新任务,若更新了Docker、containerd等相关组件,会触发服务重启,连带停止所有运行中容器。
建议排查步骤
- 提前在宿主机执行
docker events > docker_events.log,留存下次触发时的Docker全量事件日志,可直接定位容器停止指令的发起方 - 导出对应时间点的系统日志:Debian/Ubuntu查看
/var/log/syslog,CentOS/RHEL查看/var/log/messages,排查10:20-10:40之间的所有系统动作 - 检查所有容器的重启策略,确认是否统一配置了
always或unless-stopped,符合故障时自动重启的特征
内容的提问来源于stack exchange,提问作者A.J
相关产品推荐
相关产品推荐

