如何在容器里再跑 Docker?Droidspaces 嵌套容器化 5 步完整教程
【免费下载链接】Droidspaces-OSSA lightweight, LXC-like container runtime for Android and Linux. Run full Linux distributions natively with zero performance penalty项目地址: https://gitcode.com/gh_mirrors/dr/Droidspaces-OSS
Droidspaces是一款轻量级的 LXC 式容器运行时,让你在 Android 或 Linux 上原生运行完整的 Linux 发行版,性能零损耗。更酷的是:它原生支持嵌套容器化——可以直接在 Droidspaces 容器里跑 Docker,把手机变成一台随身携带的 Docker 服务器,运行 Portainer、Home Assistant 等容器化服务。本文用 5 个简单步骤带你完成配置。
开始之前:3 个前提条件(别跳过!)
✅内核版本:推荐 5.x 及以上内核;4.4–4.19 也可以原生运行 Docker/Podman(详见 Documentation/Kernel-Configuration.md)。
✅发行版:建议用Ubuntu 24.04 LTS或Debian 12这类长期支持版本,稳定性最佳。
✅存储模式:必须使用ext4 /data或rootfs.img(稀疏镜像)模式。因为 Android 默认的 f2fs 文件系统不支持 Docker 的overlay2存储驱动所需的 overlay 功能,而 rootfs.img 会把容器放在原生 ext4 文件系统上。
💡 用 Android App 安装容器时,在配置向导中选择Sparse Image(稀疏镜像)容器类型即可,这是官方推荐方式。
第 1 步:开启 NAT 网络隔离(关键设置)
Docker 需要创建自己的docker0网桥,主机网络(Host)模式下会直接失败,所以必须使用 NAT 模式。
打开 Droidspaces App → 进入容器配置 → 将网络模式改为NAT。NAT 模式还会自动检测活动上行链路,让嵌套容器拥有独立的互联网访问。
第 2 步:切换 iptables 兼容层
Docker 的网络建立在 iptables 之上。当前主流发行版默认使用nftables后端,在 Android 内核上容易报 "chain not found" 错误。安装 Docker 之前,先进入容器终端切换为 legacy 后端:
update-alternatives --set iptables /usr/sbin/iptables-legacy update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy⚠️ 老内核(4.19 及以下)上,现代 nftables 经常无法正确路由流量,这一步尤为重要。
第 3 步:安装 Docker
在容器内以 root 用户执行,官方安装脚本会自动完成依赖配置:
curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh当然也可以用发行版自带的包管理器(apt install docker.io)安装。
第 4 步:配置免 sudo 用户(可选但推荐)
把常用用户加入docker组,之后无需每次sudo:
usermod -aG docker 你的用户名 newgrp docker🔒 安全小贴士:容器不是沙箱,建议像管理普通 Linux 服务器一样,日常使用普通用户 + sudo,而不是直接 root 操作。
第 5 步:验证嵌套容器是否成功
见证时刻 🎉 运行经典的 hello-world 测试:
docker run --rm hello-world看到"Hello from Docker!"字样,说明嵌套容器化在你的手机上成功运行了!
遇到问题?两个快速排错技巧
🩺 Docker 服务起不来?在终端手动执行sudo dockerd,它会实时打印日志,能直接定位缺失的内核模块、文件系统冲突或网桥问题。
🧯 老内核 / 主机模式的"最后手段"?如果内核太老无法使用 NAT + iptables-legacy,可关闭 Docker 自身的网络管理(写入/etc/docker/daemon.json:"iptables": false, "ip6tables": false, "bridge": "none"),之后嵌套容器需用--network host启动才能上网。
🐳 还想跑 rootless Docker / Podman / Flatpak?在容器配置的 Security 区域开启Allow Sandboxing开关即可(App 中该选项在关闭时说明内核不支持 user namespace)。
参考文档
- 完整食谱(含 Tailscale 移动服务器方案):Documentation/Cool-things-you-can-do.md
- 嵌套容器内核要求详解:Documentation/Kernel-Configuration.md
- 功能深度解析(沙箱机制原理):Documentation/Features.md
现在,你的 Android 设备已经是一台真正的 Docker 宿主机——从手机里跑 Home Assistant 或 Portainer,就这么简单。
【免费下载链接】Droidspaces-OSSA lightweight, LXC-like container runtime for Android and Linux. Run full Linux distributions natively with zero performance penalty项目地址: https://gitcode.com/gh_mirrors/dr/Droidspaces-OSS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考