【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. 容器日志无异常
所有容器停止前均为正常业务日志。
未发现:
表现为统一被外部终止。
根据证据推测(请官方确认)
怀疑当前 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