游客发表
Termux 里跑 Docker 这件事,安装三年前基本没戏。安装现在虽然能装,安装但坑比想象的安装多。我上周在 Pixel 6 上折腾了一下午,安装把过程记下来,安装省得你踩同样的安装雷。
核心问题在于内核。安装Docker 依赖 cgroups 和命名空间,安装而 Android 官方内核默认砍掉了不少容器相关特性。安装Termux 本身只是安装个终端模拟器,它不提供内核级虚拟化。安装所以你在 Termux 里装 Docker,安装实际上是安装在用户空间跑一个叫 proot-distro 的东西来模拟 rootfs,再用 udocker 或 podman 这类工具绕开真正的安装 Docker daemon。真正的 docker-ce 包?官方源里没有,别浪费时间 pkg install docker,那只会报错。
可行的路径有两条。一条是 proot-distro 装 Ubuntu,然后在 Ubuntu 里装 docker.io。但这样跑出来的 Docker 依然没有内核支持,启动容器时会卡在 failed to mount overlay。另一条是直接用 udocker,它不需要 root,也不需要 daemon,通过 fakeroot 和 PRoot 模拟容器环境。我选了后者,因为简单。
安装步骤不复杂。先更新 Termux 的包列表:pkg update && pkg upgrade。然后装 Python 和 pip:pkg install python。接着 pip install udocker。注意,udocker 是 Python 写的,装完直接敲 udocker 就能看到帮助。第一次运行它会提示你初始化,执行 udocker install 下载必要的二进制文件。这个过程需要网络,大概 30MB 左右。
拉镜像的时候有个细节。udocker 默认从 Docker Hub 拉,但国内网络你懂的。可以设置镜像加速,在 ~/.udocker/udocker.conf 里加一行 registry_url = https://docker.mirrors.ustc.edu.cn。我试了阿里云的,拉 alpine 镜像花了 40 秒,能接受。
跑容器:udocker run alpine echo "hello from termux"。第一次会解压镜像到 ~/.udocker 目录,之后启动很快。但注意,udocker 不支持 -v 挂载宿主机目录,它用的是自己的虚拟文件系统。想共享文件?只能通过 udocker cp 手动拷进去,或者把文件放在 /sdcard 下,然后在容器里用 --volume 绑定——实际上还是拷贝。
性能方面,别指望跑数据库或编译大型项目。我试着在 udocker 里跑 python:3.11-alpine 执行一个简单的 numpy 计算,比宿主机慢 3 倍左右。CPU 密集任务基本废了,但跑个轻量 web 服务或者测试脚本还行。内存占用倒是不高,alpine 容器启动后大概 15MB。
有个坑我踩了两次:Termux 的存储权限。如果你把镜像存在 ~/.udocker,而 Termux 被系统杀后台,下次启动可能报 permission denied。解决办法是把 ~/.udocker 软链接到 /data/data/com.termux/files/home/storage 下,或者干脆 termux-setup-storage 后把工作目录设在 ~/storage。另外,Android 12 以上对后台进程限制更严,建议在 Termux 通知里点“Acquire wakelock”,不然跑长任务会被冻结。
最后说句实在的:如果你只是想在手机上跑个 Linux 容器玩,proot-distro 装 Debian 更省心。Docker 在 Termux 里更像是个半残的玩具,能跑,但别当真。真要搞容器化开发,远程连服务器吧,手机屏幕搓命令行,眼睛先受不了。
友情链接