一、Droidspaces容器基础配置

1.1 RootFS资源获取

Droidspaces容器镜像构建源码仓库,包含多系统版本Dockerfile、构建脚本及自动化运维配置,持续更新维护,支持Alpine、Arch、Debian、Ubuntu、OpenWrt等主流系统镜像构建,最新版本为 v20260615-175931

RootFS下载地址:Droidspaces/Droidspaces-rootfs-builder

仓库核心特性:

  • 支持多架构、多系统版本轻量化/完整版RootFS构建
  • 内置网络网关模式权限适配、XFCE桌面环境运行修复
  • 采用多线程xz压缩替代传统gzip,提升压缩效率
  • 配置自动化每周清理脚本,自动清理老旧Release、标签及冗余资源

1.2 容器密码设置

进入容器后,执行以下命令设置root登录密码:

1
passwd

1.3 SSH远程连接配置

开启root账号SSH密码登录权限,重启SSH服务生效:

1
sed -i 's/^PermitRootLogin no/PermitRootLogin yes/' /etc/ssh/sshd_config && sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && systemctl restart ssh

二、192.168.1.7 设备Docker运行失败修复记录

2.1 运行环境信息

  • 设备IP:192.168.1.7
  • 登录账号:root
  • 系统版本:Debian GNU/Linux 13 (trixie) aarch64
  • 内核版本:4.9.148(麒麟970 Android定制内核)
  • Docker版本:26.1.5+dfsg1

2.2 故障现象

2.2.1 Docker服务无法启动

执行 docker psdocker info 命令报错,无法连接Docker守护进程:

1
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

2.2.2 服务日志核心报错

通过journalctl -u docker 查看Docker服务日志,关键错误信息如下:

1
2
3
4
5
6
failed to mount overlay: invalid argument
exec: "fuse-overlayfs": executable file not found in $PATH
failed to start daemon: Error initializing network controller:
Failed to program NAT chain:
iptables --wait -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
Warning: Extension addrtype revision 0 not supported, missing kernel module?

2.2.3 服务启动后衍生故障

修复Docker守护进程启动问题后,执行 docker run hello-world 仍存在两个核心问题:

  1. Docker Hub官方源连接超时,镜像拉取失败: Get "https://registry-1.docker.io/v2/": context deadline exceeded
  2. Cgroup BPF配置异常,容器启动报错: error setting cgroup config for procHooks process: ``bpf_prog_query(BPF_CGROUP_DEVICE) failed: invalid argument

2.3 故障根因分析

该设备基于麒麟970 Android定制内核,内核裁剪后缺失标准Linux Docker运行所需核心模块与能力,具体问题如下:

  1. 存储驱动异常:当前文件系统不支持overlay2存储驱动,且系统缺失fuse-overlayfs工具,导致Docker默认存储驱动挂载失败。
  2. 网络模块缺失:内核未开启 CONFIG_NETFILTER_XT_MATCH_ADDRTYPE 模块,无法解析addrtype匹配规则,Docker自动配置iptables NAT链路失败,守护进程直接退出。
  3. 外网镜像源不通:国内网络环境无法直连Docker Hub官方源,超时导致镜像拉取失败。
  4. Cgroup能力不兼容:系统基于cgroup v2启动,但内核未启用 CONFIG_CGROUP_DEVICE,缺失设备控制BPF查询能力,标准runc运行容器校验失败。

内核核心模块校验结果:

1
2
3
4
5
# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set
# CONFIG_CGROUP_DEVICE is not set
CONFIG_CGROUP_BPF=y
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y

2.4 完整修复方案

2.4.1 配置Docker守护进程兼容参数

编辑/新建Docker守护进程配置文件 /etc/docker/daemon.json,适配残缺内核、配置国内镜像加速源,规避所有兼容性问题。

镜像加速说明:采用DaoCloud国内开源镜像服务,支持全品类容器镜像加速,与官方镜像哈希值完全一致,解决Docker Hub外网访问超时问题(服务存在1小时缓存延迟,建议使用固定版本标签替代latest)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"storage-driver": "vfs",
"iptables": false,
"ip-masq": false,
"exec-opts": ["native.cgroupdriver=cgroupfs"],
"default-runtime": "runc-nocgdev",
"runtimes": {
"runc-nocgdev": {
"path": "/usr/local/bin/runc-nocgdev"
}
},
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}

配置参数作用详解:

  • storage-driver: vfs:弃用不兼容的overlay2,使用基础vfs存储驱动,规避挂载失败问题。
  • iptables: false / ip-masq: false:关闭Docker自动管理iptables和IP伪装,避免触发内核不支持的addrtype规则。
  • native.cgroupdriver=cgroupfs:切换Cgroup驱动为兼容模式,适配残缺cgroup v2内核。
  • registry-mirrors:配置国内稳定镜像加速源,解决外网镜像拉取超时问题。
  • runc-nocgdev:自定义运行时,绕过内核缺失的设备Cgroup BPF校验。

重启Docker服务生效配置:

1
2
systemctl daemon-reload
systemctl restart docker

2.4.2 搭建Runc兼容包装器

创建 /usr/local/bin/runc-nocgdev 自定义运行时脚本,规避Cgroup设备控制缺失问题:

脚本核心逻辑:

  1. 容器启动前自动修改OCI bundle的config.json配置;
  2. 清空 linux.resourceslinux.cgroupsPath 配置,跳过设备资源校验;
  3. 追加 --rootless=true 参数运行runc,忽略内核Cgroup能力缺口。

注:当前调试版本包含 /tmp/runc-nocgdev.log 日志输出,不影响运行,后续可删除日志输出逻辑,避免日志文件持续膨胀。

2.5 修复验证结果

2.5.1 Docker服务状态正常

服务成功启动,无报错,核心参数适配生效:

1
2
3
4
5
6
7
8
docker.service: active (running)
Storage Driver: vfs
Cgroup Driver: cgroupfs
Cgroup Version: 2
Runtimes: runc runc-nocgdev io.containerd.runc.v2
Default Runtime: runc-nocgdev
Registry Mirrors:
https://docker.m.daocloud.io/

2.5.2 镜像拉取正常

1
docker pull hello-world

输出结果:Status: Downloaded newer image for hello-world:latest

2.5.3 容器运行正常

1
docker run --rm hello-world

成功输出官方测试提示,容器运行完全正常:

1
2
Hello from Docker!
This message shows that your installation appears to be working correctly.

2.6 关键注意事项

本次修复为残缺内核兼容方案,并非标准Linux Docker完整能力,存在一定局限性,生产环境需重点关注:

  1. 存储性能降级:vfs存储驱动无分层缓存机制,读写性能低于overlay2,磁盘占用更高。
  2. 网络能力受限:关闭Docker自动iptables管理后,默认bridge网络无NAT转发,外网访问容器建议使用 --network host 模式,或手动配置NAT规则。
  3. 资源隔离失效:runc-nocgdev绕过Cgroup设备与资源限制,Docker的CPU、内存、设备隔离、权限管控均不可靠,存在安全风险。
  4. 长期优化方案:重新编译内核,补齐 overlay文件系统、fuse-overlayfs、addrtype网络模块、CGROUP_DEVICE设备控制 核心能力,彻底适配标准Docker运行要求。

2.7 后续复查与优化操作

当前设备可正常ping通,但SSH端口22临时无法连接,待SSH服务恢复后,执行以下命令复查服务稳定性:

1
2
3
4
5
6
7
8
9
# 查看SSH、Docker服务状态
systemctl status ssh --no-pager
systemctl status docker --no-pager

# 校验Docker完整配置
docker info

# 重新验证容器运行能力
docker run --rm hello-world

清理调试日志(可选):

1
rm -f /tmp/runc-nocgdev.log

2.8 镜像加速最佳实践补充

本次使用的DaoCloud镜像加速服务支持全主流容器仓库加速,适配规则如下:

  • docker.io 官方镜像:替换为docker.m.daocloud.io
  • gcr.io/ghcr.io/k8s镜像:对应 gcr.m.daocloud.ioghcr.m.daocloud.io
  • Ollama模型镜像:ollama.m.daocloud.io(支持AI模型加速拉取)

使用建议:优先使用固定版本Tag替代latest标签,规避缓存延迟导致的版本更新不及时问题;大规模拉取镜像建议选择北京时间凌晨1-7点闲时,规避限流拥堵。