魅蓝Note5 Root + 改内核激活命名空间:让Docker跑在安卓上
安卓内核缺了啥补上命名空间Docker就能跑前言想在魅蓝Note5上用Docker跑服务想法很美好现实很骨感——安卓内核默认阉割了命名空间Namespaces功能而Docker依赖的就是这个。本文记录如何在魅蓝Note5上Root、修改内核配置、重新编译内核激活命名空间功能最终让Docker跑起来。全程尽量精简直接上干货。一、为什么安卓不能直接跑DockerDocker依赖Linux内核的命名空间Namespaces实现隔离包括UTS主机名隔离PID进程ID隔离NET网络隔离USER用户隔离MOUNT文件系统挂载隔离问题来了安卓内核在编译时默认关闭了这些命名空间选项。谷歌的Microdroid内核配置明确将CONFIG_NAMESPACES相关选项移除了只保留了MOUNT命名空间。这就导致Docker根本跑不起来。所以我们的目标就是——重新编译内核把这些开关打开。二、准备工作硬件与软件项目说明手机魅蓝Note5已解锁BL电脑Ubuntu 20.04编译内核用内核源码对应魅蓝Note5的Linux内核源码3.18.x工具链ARM64交叉编译工具链Docker静态二进制从官方下载arm64版本前置步骤解锁BL参考上一篇强解BL教程Root手机刷入Magisk备份内核用dd备份/dev/block/by-name/boot三、修改内核配置开启命名空间3.1 获取内核源码魅蓝Note5用的是MT6755Helio P10内核版本Linux 3.18.x。源码可以从官方开源页面或第三方GitHub仓库获取。3.2 修改内核配置找到内核源码目录下的arch/arm64/configs/找到对应手机的defconfig文件。关键修改在配置文件中添加或改为ybash# 开启命名空间支持核心开关 CONFIG_NAMESPACESy # 开启各类命名空间 CONFIG_UTS_NSy CONFIG_IPC_NSy CONFIG_USER_NSy CONFIG_PID_NSy CONFIG_NET_NSy # 开启CGroup支持Docker需要 CONFIG_CGROUPSy CONFIG_CGROUP_CPUACCTy CONFIG_CGROUP_DEVICEy CONFIG_CGROUP_FREEZERy CONFIG_CGROUP_SCHEDy CONFIG_CPUSETSy CONFIG_MEMCGy # 开启OverlayFSDocker镜像分层需要 CONFIG_OVERLAY_FSy3.3 关于CONFIG_EXPERTCONFIG_EXPERTy注意CONFIG_NAMESPACES这类选项通常被CONFIG_EXPERT保护需要先把CONFIG_EXPERTy打开命名空间选项才会出现。bash3.4 编译内核bashexport ARCHarm64 export CROSS_COMPILEaarch64-linux-android- make your_device_defconfig make -j$(nproc)编译完成后得到arch/arm64/boot/Image.gz-dtb内核文件。四、打包并刷入内核4.1 用AnyKernel3打包下载AnyKernel3模板替换内核文件为编译好的Image.gz-dtb修改anykernel.sh中的设备名打包成ZIP4.2 刷入进入TWRP Recovery刷入打包好的内核ZIP重启手机五、安装Docker并验证5.1 安装Docker静态二进制由于安卓没有systemd不能直接安装Docker包推荐用静态二进制bash# 下载arm64版docker二进制 wget https://download.docker.com/linux/static/stable/aarch64/docker-24.0.0.tgz tar -xzf docker-24.0.0.tgz cp docker/* /system/bin/5.2 启动Docker守护进程bashdockerd --iptablesfalse --bridgenone 5.3 验证命名空间bash# 查看内核是否支持命名空间 ls /proc/self/ns/ # 应该看到: ipc mnt net pid user uts # 运行测试容器 docker run hello-world如果能看到hello-world输出说明命名空间已激活Docker正常工作。六、常见问题Q1刷入内核后无法开机检查内核编译配置是否正确尝试用原厂内核的defconfig基础上增量修改保留原厂内核的驱动配置Q2Docker启动报namespace not supported确认内核配置中CONFIG_NAMESPACES已开启检查/proc/config.gz确认当前运行内核的配置Q3性能怎么样MT6755跑Docker跑点轻量服务alpine、nginx没问题别指望跑大型镜像。总结魅蓝Note5跑Docker的核心难点就是安卓内核默认阉割了命名空间。通过重新编译内核开启CONFIG_NAMESPACES等选项就能让Docker正常运行。整个流程Root手机修改内核配置开启命名空间CGroupOverlayFS编译并刷入内核安装Docker静态二进制老手机发挥余热跑点小服务还是可以的。