收起左侧

多个版本存在:手动创建容器配置 unless-stopped 后,系统重启无法自动恢复启动

2
回复
33
查看
[ 复制链接 ]

1

主题

0

回帖

0

牛值

江湖小虾

【Docker BUG】多个版本存在:手动创建容器配置 unless-stopped 后,系统重启无法自动恢复启动

系统版本

当前验证环境:

  • 系统:fnOS
  • 版本:1.1.3106
  • 架构:x86
  • CPU:Intel N150
  • 部署方式:物理机

设备环境

  • Docker 手动创建多个容器
  • Docker 数据目录位于 /vol1/docker
  • SSH 管理
  • 局域网环境

问题描述

多个通过 Docker 手动创建的容器均配置:

bash --restart unless-stopped

理论上系统重启后应自动恢复运行。

实际情况:

  • 应用中心安装的容器可以自动恢复
  • 手动创建的 Docker 容器无法自动恢复
  • 容器被停止后长期保持停止状态
  • Docker 从未尝试自动拉起

受影响容器:

  • miair
  • tailscale
  • cpa-usage-keeper
  • obsidian
  • cli-proxy-api

未受影响容器:

  • frigate(应用中心安装)
  • xiaomi-miloco(应用中心安装)

出现频率

必现。

本次已完成完整取证和复现验证。

不是单版本问题

需要特别说明:

该现象并非仅出现在 fnOS 1.1.3106。

在此前多个版本中,我已经长期观察到:

  • 手动创建容器重启后不会自动恢复
  • 应用中心容器可以恢复

只是之前没有完整取证。

本次在 1.1.3106 上完成了系统级证据收集,因此怀疑这是 Docker 服务管理逻辑中的长期问题,而非某一次升级引入的新问题。

复现过程

第一次重启

系统重启后:

5 个手动创建容器正常恢复。

第二次重启

系统再次重启后:

5 个容器全部停止。

检查发现:

text ExitCode = 255 RestartCount = 0 RestartPolicy = unless-stopped

之后系统持续运行数天。

期间再次发生系统重启。

上述容器仍未自动恢复。

必须手动执行:

bash docker start

才能恢复。

关键证据

1. docker.service 配置

执行:

bash systemctl cat docker.service

发现:

ini ExecStop=/bin/sh -c "docker stop --time 3 $(docker ps -a -q)"

即系统停止 Docker 服务时会执行:

bash docker stop --time 3 $(docker ps -a -q)

2. 容器退出时间完全一致

受影响容器:

容器 ExitCode RestartCount RestartPolicy FinishedAt
miair 255 0 unless-stopped 2026-05-31T23:53:52.421Z
tailscale 255 0 unless-stopped 2026-05-31T23:53:52.422Z
cpa-usage-keeper 255 0 unless-stopped 2026-05-31T23:53:52.422Z
obsidian 255 0 unless-stopped 2026-05-31T23:53:52.424Z
cli-proxy-api 255 0 unless-stopped 2026-05-31T23:53:52.425Z

5 个容器均在同一秒内退出。

3. RestartCount 全部为 0

所有容器:

text RestartCount = 0

说明 Docker 从未尝试自动恢复这些容器。

4. 系统重启时间与容器退出时间完全对应

执行:

bash last reboot

关键记录:

text Mon Jun 1 01:53

容器退出时间:

text 2026-05-31T23:53:52Z

换算为 CEST:

text 2026-06-01 01:53:52

与系统重启时间精确一致。

5. 容器日志无异常

所有容器停止前均为正常业务日志。

未发现:

  • 崩溃
  • panic
  • OOM
  • 配置错误
  • 网络错误

表现为统一被外部终止。

根据证据推测(请官方确认)

怀疑当前 Docker 服务停止流程如下:

text 系统重启 ↓ systemd 停止 docker.service ↓ 执行 ExecStop ↓ docker stop --time 3 所有容器 ↓ 容器被显式停止 ↓ Docker 将容器记录为 stopped ↓ 系统启动 ↓ unless-stopped 不再自动恢复

从目前取证结果看:

  • ExitCode=255
  • RestartCount=0
  • RestartPolicy=unless-stopped
  • FinishedAt 与重启时间一致
  • docker.service 存在上述 ExecStop

这些现象与上述推测完全吻合。

希望官方确认:

当前实现是否会导致 Docker restart policy 失效。

已导出完整系统诊断日志,可根据技术同学要求提供。

进一步验证

为了验证推测是否成立,我进行了只读取证后的小范围修复测试:

创建 systemd override:

ini [Service] ExecStop= TimeoutStopSec=60 KillMode=process [Unit] After=vol1.mount Requires=vol1.mount

随后:

  • 重新启动容器
  • 重启整机

验证结果:

5 个手动容器全部自动恢复运行。

重启后:

text Status=running Restart=unless-stopped

并自动获得新的 StartedAt 时间。

说明 Docker restart policy 本身工作正常。

问题似乎来自 docker.service 当前停止流程。

联系方式

微信群 飞牛私有云fnOS49-Limenvoy

收藏
送赞
分享
感谢反馈!这个我们先记录下来,已转相关的技术同学查看。

2

主题

4

回帖

0

牛值

江湖小虾

这个问题自开始用飞牛就一直存在了,除非把Docker容器的启动模式改为always

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则