旧手机拯救计划 - 在Android手机上部署Docker与LXC
一切的前提是安装了支持Docker/LXC的内核
本文使用的设备为小米8SE,如果你跟我是同一个型号,可以使用我发布的内核 (适用于MIUI12/12.5,安卓10)
我采用的方案是在chroot容器中启动Docker与LXC,可以省去很多不必要的麻烦,配置起来更简单,且几乎没有性能损失

安装Linux Deploy
Github下载
需要root权限
配置Ubuntu容器
选项 | 内容 | ![]() |
---|---|---|
发行版 | Ubuntu | |
发行版 GNU/Linux 版本 | jammy(22.04) (推荐) | |
源地址 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ | |
安装类型 | 镜像文件 | |
镜像大小(MB) | 8192+ (推荐) | |
用户名 | root | |
本地化 | zh_CN.UTF-8 | |
DNS | 223.5.5.5 (推荐) | |
初始化 | 启用 | |
初始化系统 | sysv | |
挂载 | 启用 | |
挂载点列表 | 见下文 | |
SSH | 启用 | |
SSH 设置→端口 | 1024+ (推荐) |
挂载点列表
先挂载 cgroup
1 | su -c "mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup && mkdir -p /sys/fs/cgroup/devices && mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices && mkdir -p /sys/fs/cgroup/systemd && mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd" |
在手机终端执行,看输出中的挂载点
1 | su -c "mount | grep cgroup" |
把输出中的挂载点全部挂载上,***注意顺序:***先挂载/sys/fs/cgroup
目录下的,再挂载/dev
目录下的,比如我这里就是

启动
返回主界面,点击右上角安装,看到 <<< deploy
后点击启动

使用任意ssh工具连接到容器 ssh root@IP -p端口
例如 ssh root@127.0.0.1 -p8023
安装docker
添加仓库和公钥
1 | apt update |
1 | echo \ |
安装docker-ce
1 | apt update |
启动docker
挂载 cgroup
,每次重启手机,都需要在手机终端运行(注意是手机终端,不是chroot容器终端),每次开机执行一次即可。如果是我发布的内核,安装过kernel-fix
模块后不需要这一步
1 | su -c "mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup && mkdir -p /sys/fs/cgroup/devices && mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices && mkdir -p /sys/fs/cgroup/systemd && mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd" |
启动 dockerd
,每次重启chroot容器都需要再次运行
1 | DOCKER_RAMDISK=true dockerd --iptables=false |
另开一个终端,ssh连接到容器
1 | docker run --rm hello-world |
看到 Hello from Docker!
和一大串话就是安装好了
注意Docker容器要上网就必须使用host模式,在启动命令里添加 --net=host
配置dockerd自启动
1 | echo 'DOCKER_OPTS="--iptables=false"' >> /etc/default/docker |
重启chroot容器后可以直接使用docker,不需要再启动 dockerd
安装LXC
安装
1 | apt update |
配置LXC
1 | echo "lxc.init.cmd = /sbin/init systemd.unified_cgroup_hierarchy" >> /usr/share/lxc/config/common.conf |
挂载 cgroup
,每次重启手机,都需要在手机终端运行(注意是手机终端,不是chroot容器终端),每次开机执行一次即可。如果是我发布的内核,安装过kernel-fix
模块后不需要这一步
1 | su -c "mount -t tmpfs -o mode=755 tmpfs /sys/fs/cgroup && mkdir -p /sys/fs/cgroup/devices && mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices && mkdir -p /sys/fs/cgroup/systemd && mount -t cgroup cgroup -o none,name=systemd /sys/fs/cgroup/systemd" |
创建LXC容器
1 | lxc-create -t download -n 容器名 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images |
以 Ubuntu 22.04
为例,依次输入 ubuntu jammy arm64
改密码
1 | chroot /var/lib/lxc/容器名/rootfs /bin/passwd |
输入密码 回车
再次输入密码 回车
启动LXC容器
1 | lxc-start -n 容器名 |
进入LXC容器
1 | lxc-console -n 容器名 |
输入用户名 root 回车
输入密码 回车
按 Ctrl + a + q 退出容器
改DNS 必改!!
1 | echo 'nameserver 223.5.5.5' > /etc/resolv.conf |
换源
1 | sed -i 's|http://ports.ubuntu.com/ubuntu-ports|https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports|g' /etc/apt/sources.list |
改密码
1 | passwd |
输入密码 回车
再次输入密码 回车