ARM 飞牛 fnOS 升级到 1.2.0302 后 Docker 不可用:现象、根因与解决办法
适用:fnOS 升级后 Docker 异常。以下修复命令均需在飞牛「终端」或 SSH 中以管理员权限执行(带 sudo)。
注意我的设备是某RK3566 T (arm fnos),以上只是本人升级到1.2.0302遇到问题,由于全部分析与修复过程AI完成,没有实际操作,贴出解决办法供大家参考。
故障一:升级后 Docker 起不来,所有容器停止
现象
- 飞牛 Docker 客户端报错或打不开,所有容器变成停止状态。
systemctl status docker 显示 failed,关键报错:
ExecStart=/usr/bin/dockerd ... status=203/EXEC + No such file or directory
- 客户端界面有时还能打开(飞牛 Docker 是「客户端层 + 引擎层」两层架构,客户端依赖的
dockermgr 仍在跑)。
根因(与权限无关!)
- fnOS 升级到 1.2.0302 时,把 4 个 docker 包卸掉了:
docker-ce / docker-ce-cli / docker-buildx-plugin / docker-compose-plugin
- 导致
/usr/bin/dockerd 二进制文件缺失 → systemd 启动时报 203/EXEC。
- ⚠️ 很多人误以为是权限问题,其实不是。203/EXEC + "No such file" 是文件不存在,不是 Permission denied。
修复
# 1. 先看自己该装哪个版本(匹配系统里残留的 rootless-extras 版本)
dpkg -l | grep docker-ce-rootless-extras
apt-cache madison docker-ce # 列出源里可用版本
# 2. 解除 hold(部分环境这俩被标记 hold,不解除 apt 会 "keep back" 装不上)
sudo apt-mark unhold docker-ce docker-ce-cli
# 3. 钉版本重装(关键!不要无版本装,否则源默认会装到更新的版本,
# 与残留的 containerd / rootless-extras 版本错位,埋新坑)
sudo apt-get install -y --allow-downgrades \
docker-ce=5:29.1.1-1~debian.12~bookworm \
docker-ce-cli=5:29.1.1-1~debian.12~bookworm \
docker-buildx-plugin docker-compose-plugin
# ↑ 上面的 29.1.1 是我的环境版本,请替换成你自己第 1 步查到的版本
# 4. 重启
sudo systemctl restart docker
sudo systemctl restart dockermgr
sleep 30
验证
sudo docker ps -a → 原有容器应回到 Up
sudo docker version → Client / Server 版本号应一致
- 飞牛 Docker 页面容器列表恢复
可逆性:本操作只 apt install + restart,无任何格式化/刷机级命令。容器数据在 /var/lib/docker,apt 不会动它,修复不可逆风险极低。若想万无一失,重装前先拍快照:sudo btrfs subvolume snapshot / /root/snap-before-dockerfix。
故障二:Docker 修好后,Web UI 不显示 CPU / 内存 / 网速
现象
- 容器能正常跑,但飞牛 Docker 页面里各容器的 CPU 占比、内存占用、网络收发网速三项全空白。
排障第一步:确认是不是引擎层问题
sudo docker stats --no-stream
- 有数据(CPU% / MEM / NET I/O 都正常)→ 问题在飞牛 UI 中间层,看下面根因。
- 无数据 → 说明 dockerd 还没真正起好,回到故障一检查。
根因
- 飞牛有个「Docker 流服务」
dsmgr.service,负责把容器实时监控实时推给 Web UI。
- 它在开机时(那时 dockerd 还不存在)就启动了,建了一条失效的 stats 流;该服务进程没退出就不会自动重启,dockerd 恢复后它也不会重连 → 这条死连接一直挂着,于是三项监控全空白。
修复(一行)
sudo systemctl restart dsmgr
然后浏览器硬刷新飞牛 Docker 页面(Mac Cmd+Shift+R / Win Ctrl+Shift+R)清前端缓存。
- 若仍空白,再补一句:
sudo systemctl restart dockermgr
通用排障顺序(建议收藏)
systemctl status docker → 看是不是 203/EXEC(文件缺失,走故障一)
sudo docker stats --no-stream → 引擎层有数据但 UI 空白(走故障二)
- 多数「升级后 Docker 挂了」本质都是包被卸,不是配置炸了,优先
dpkg -l | grep docker 看包状态。
一句话总结:升级后 Docker 全停 = 包被卸,钉版本重装即可;装好后监控空白 = dsmgr 死流,重启它 + 硬刷新即可。两个都低风险、可逆。