麒麟970的Droidspaces容器配置
一、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 ps、docker 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 | failed to mount overlay: invalid argument |
2.2.3 服务启动后衍生故障
修复Docker守护进程启动问题后,执行 docker run hello-world 仍存在两个核心问题:
- Docker Hub官方源连接超时,镜像拉取失败:
Get "https://registry-1.docker.io/v2/": context deadline exceeded - Cgroup BPF配置异常,容器启动报错:
error setting cgroup config for procHooks process: ``bpf_prog_query(BPF_CGROUP_DEVICE) failed: invalid argument
2.3 故障根因分析
该设备基于麒麟970 Android定制内核,内核裁剪后缺失标准Linux Docker运行所需核心模块与能力,具体问题如下:
- 存储驱动异常:当前文件系统不支持overlay2存储驱动,且系统缺失fuse-overlayfs工具,导致Docker默认存储驱动挂载失败。
- 网络模块缺失:内核未开启
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE模块,无法解析addrtype匹配规则,Docker自动配置iptables NAT链路失败,守护进程直接退出。 - 外网镜像源不通:国内网络环境无法直连Docker Hub官方源,超时导致镜像拉取失败。
- Cgroup能力不兼容:系统基于cgroup v2启动,但内核未启用
CONFIG_CGROUP_DEVICE,缺失设备控制BPF查询能力,标准runc运行容器校验失败。
内核核心模块校验结果:
1 | # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set |
2.4 完整修复方案
2.4.1 配置Docker守护进程兼容参数
编辑/新建Docker守护进程配置文件 /etc/docker/daemon.json,适配残缺内核、配置国内镜像加速源,规避所有兼容性问题。
镜像加速说明:采用DaoCloud国内开源镜像服务,支持全品类容器镜像加速,与官方镜像哈希值完全一致,解决Docker Hub外网访问超时问题(服务存在1小时缓存延迟,建议使用固定版本标签替代latest)。
1 | { |
配置参数作用详解:
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 | systemctl daemon-reload |
2.4.2 搭建Runc兼容包装器
创建 /usr/local/bin/runc-nocgdev 自定义运行时脚本,规避Cgroup设备控制缺失问题:
脚本核心逻辑:
- 容器启动前自动修改OCI bundle的config.json配置;
- 清空
linux.resources、linux.cgroupsPath配置,跳过设备资源校验; - 追加
--rootless=true参数运行runc,忽略内核Cgroup能力缺口。
注:当前调试版本包含 /tmp/runc-nocgdev.log 日志输出,不影响运行,后续可删除日志输出逻辑,避免日志文件持续膨胀。
2.5 修复验证结果
2.5.1 Docker服务状态正常
服务成功启动,无报错,核心参数适配生效:
1 | docker.service: active (running) |
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 | Hello from Docker! |
2.6 关键注意事项
本次修复为残缺内核兼容方案,并非标准Linux Docker完整能力,存在一定局限性,生产环境需重点关注:
- 存储性能降级:vfs存储驱动无分层缓存机制,读写性能低于overlay2,磁盘占用更高。
- 网络能力受限:关闭Docker自动iptables管理后,默认bridge网络无NAT转发,外网访问容器建议使用
--network host模式,或手动配置NAT规则。 - 资源隔离失效:runc-nocgdev绕过Cgroup设备与资源限制,Docker的CPU、内存、设备隔离、权限管控均不可靠,存在安全风险。
- 长期优化方案:重新编译内核,补齐 overlay文件系统、fuse-overlayfs、addrtype网络模块、CGROUP_DEVICE设备控制 核心能力,彻底适配标准Docker运行要求。
2.7 后续复查与优化操作
当前设备可正常ping通,但SSH端口22临时无法连接,待SSH服务恢复后,执行以下命令复查服务稳定性:
1 | # 查看SSH、Docker服务状态 |
清理调试日志(可选):
1 | rm -f /tmp/runc-nocgdev.log |
2.8 镜像加速最佳实践补充
本次使用的DaoCloud镜像加速服务支持全主流容器仓库加速,适配规则如下:
- docker.io 官方镜像:替换为
docker.m.daocloud.io - gcr.io/ghcr.io/k8s镜像:对应
gcr.m.daocloud.io、ghcr.m.daocloud.io - Ollama模型镜像:
ollama.m.daocloud.io(支持AI模型加速拉取)
使用建议:优先使用固定版本Tag替代latest标签,规避缓存延迟导致的版本更新不及时问题;大规模拉取镜像建议选择北京时间凌晨1-7点闲时,规避限流拥堵。





