旧手机除了转转还能干嘛:在非 Root 的 Android 手机上搭建开发环境
前言
本文将教你如何把闲置的 Android 手机变成一台可以运行 Docker 容器的"小服务器",并通过 VSCode/Cursor 进行远程开发。
适用场景:
- 想在手机上运行轻量级服务(如数据库、小型网站)
- 学习 Linux 和 Docker,但没有多余的电脑
- 利用旧手机的性能,避免浪费
你将学到:
- 在手机上安装 Linux 终端环境(Termux)
- 在手机上运行 Docker 容器(使用 udocker)
- 通过电脑远程连接手机进行开发
前置条件:
- 一台 Android 手机(arm64 架构)
- 电脑上安装了 adb 工具
- 手机和电脑在同一局域网内
- 已经打开开发者模式并配对电脑adb
第一步:安装和配置 Termux
1.1 什么是 Termux?
Termux 是一个在 Android 上运行的 Linux 终端模拟器,不需要 root 权限就能让你在手机上使用 Linux 命令行工具。
1.2 下载和安装 Termux
重要提示: 请从 F-Droid 下载 Termux,不要使用 Google Play 版本(已过时)。
下载地址:https://f-droid.org/en/packages/com.termux/
在电脑上通过 adb 安装:
adb install <your_termux.apk>调优建议 Android 12 及更高版本引入了一个机制,会自动杀死后台占用 CPU 过高的进程
你需要执行adb shell "/system/bin/device_config put activity_manager max_phantom_processes 2147483647"
来防止 termux被限制
在手机系统设置中,找到“应用管理” -> Termux -> “电池” -> 设置为 “不限制” (不同品牌设置方法不同,建议搜索教程)
1.3 通过 adb 进入 Termux 环境
在电脑上执行以下命令,连接到手机并切换到 Termux 环境:
# 连接到手机
adb shell
# 切换到 Termux 的运行环境
run-as com.termux files/usr/bin/bash -lic 'export PATH=/data/data/com.termux/files/usr/bin:$PATH; export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so; cd /data/data/com.termux/files/home; bash -i'1.4 配置 Termux 基础环境
进入 Termux 后,依次执行以下命令:
# 切换到国内镜像源(加快下载速度)
termux-change-repo
# 授予 Termux 访问手机存储的权限(会弹出权限请求,请点击"允许")
termux-setup-storage
# 安装 SSH 服务器,用于远程连接和传输文件
pkg install openssh
# 安装 Termux 服务管理工具
pkg install termux-services
# 安装基础工具
# file: 查看文件类型
# proot: 运行其他 Linux 发行版(稍后会用到)
# curl: 下载文件
# busybox: 常用 Linux 命令集合
pkg install file proot curl busybox1.5 配置 SSH 远程连接
# 设置 Termux 的登录密码
passwd
# 启动 SSH 服务(默认监听 8022 端口)
sshd测试连接: 在电脑上打开任意 SSH 客户端,执行:
# 用户名可以随意填写,密码是你刚才设置的密码
ssh 任意用户名@<手机IP地址> -p 8022注意:
- 此时普通 SSH 客户端可以连接,但 VSCode/Cursor 可能无法连接,这是正常的
- 稍后我们会配置 proot 环境来解决这个问题


第二步:安装 udocker 并运行容器
2.1 什么是 udocker?
udocker 是一个"用户态"的 Docker 实现,它不需要 root 权限就能运行 Docker 容器。这对于 Android 手机来说非常理想,因为大多数手机没有 root。
与普通 Docker 的区别:
- 普通 Docker:需要 root 权限,提供完整的资源隔离和网络隔离
- udocker:无需 root,但几乎没有资源隔离(包括端口和网络)
2.2 安装 udocker
项目地址:https://github.com/indigo-dc/udocker
在 Termux 中执行:
# 下载 udocker
wget https://github.com/indigo-dc/udocker/releases/download/1.3.17/udocker-1.3.17.tar.gz
# 解压
tar zxvf udocker-1.3.17.tar.gz
# 添加到环境变量 官方这里的有问题,程序自带的proot太旧,会在新安卓上被系统杀掉,这里需要使用termux包管理提供的proot
export PATH=$PATH:`pwd`/udocker-1.3.17/udocker
# 安装依赖组件
udocker install提示: 安装过程需要下载依赖,如果网络较慢,可以在手机上开启代理。
验证安装:
$ udocker --version
version: 1.3.17
tarball: https://download.a.incd.pt/udocker/udocker-englib-1.2.11.tar.gz
tarball_release: 1.2.112.3 udocker 与 Docker 的重要区别
⚠️ 必须了解的差异:
端口隔离问题
- 普通 Docker:容器端口需要手动映射(如
-p 3306:3306),不同容器可以使用相同端口 - udocker:所有容器的端口直接暴露在主机上,无法做端口隔离
- 安全风险:如果容器运行了数据库等服务,端口会直接暴露到局域网,务必注意安全
- 普通 Docker:容器端口需要手动映射(如
容器管理差异
- 普通 Docker:可以使用
docker stop停止容器,docker-compose管理多容器 - udocker:没有
stop命令,只能用rm删除容器 - 进程管理:容器进程会直接显示在
ps -aux中
- 普通 Docker:可以使用
命令语法对比
Docker 命令:
docker run -it --rm -v my-dir:my-dir hello-world等价的 udocker 命令:
udocker run --volume "my-dir:my-dir" --rm hello-world2.4 使用建议
- 如果容器服务卡死无法停止,可能需要重启手机
- 使用
udocker --help查看完整命令列表,也可以将输出给 AI 寻求帮助 - 到这里,你已经可以在手机上运行 Docker 容器了!
第三步:配置 VSCode/Cursor 远程连接
3.1 为什么需要 proot?
技术背景:
- Termux 使用的是 Android 的 bionic libc 库,而不是标准的 glibc
- VSCode/Cursor 的远程连接组件依赖 glibc,无法直接在 Termux 中运行
- 解决方案:使用 proot 在 Termux 中运行一个完整的 Linux 发行版(如 Alpine、Ubuntu 等)
简单理解: proot 就像是在 Termux 里面套了一个"虚拟的"Linux 系统,这个系统可以运行 VSCode 需要的组件。
3.2 安装 proot-distro 工具
proot-distro 是 Termux 官方提供的工具,用于管理不同的 Linux 发行版。
项目地址:https://github.com/termux/proot-distro/
3.2.1 下载安装脚本
# 下载 proot-distro 安装包(在电脑上执行)
wget https://github.com/termux/proot-distro/archive/refs/heads/master.zip
# 通过 SSH 传输到手机
scp proot-distro-master.zip <手机IP地址>:.3.2.2 在手机上安装
在 Termux 中执行:
# 解压安装包
unzip proot-distro-master.zip
# 进入目录并安装
cd proot-distro-master
./install.sh

3.3 下载并安装 Linux 发行版
3.3.1 选择发行版
前往 proot-distro releases 页面下载发行版镜像。
推荐使用 Alpine Linux,原因:
- 体积小,安装快
- 兼容性好,没有 systemd 相关问题
- 适合运行服务
不推荐 Arch Linux / Ubuntu:
- 这些发行版依赖 systemd
- systemd 需要 dbus 支持,但在 proot 环境下无法正常工作
- 如果你只是需要命令行环境(不运行后台服务),也可以使用
3.3.2 传输发行版文件到手机
在电脑上执行:
# 通过 SSH 传输(注意端口是 8022)
scp -P 8022 ./Downloads/alpine-aarch64-pd-v4.30.1.tar.xz <用户名>@<手机IP>:.
# 示例输出
archlinux-aarch64-pd-v4.30.1.tar.xz 100% 156MB 58.3MB/s 00:023.3.3 离线安装发行版
在 Termux 中执行:
# 1. 计算文件的 SHA256 哈希值(用于验证文件完整性)
sha256sum alpine-aarch64-pd-v4.30.1.tar.xz
# 输出示例:
# bb23e51cd5b5ae56bf946a34992876902de1bb2ecc0f639d59c702c6371adc62 alpine-aarch64-pd-v4.30.1.tar.xz
# 2. 设置环境变量,告诉安装脚本使用本地文件
export PD_OVERRIDE_TARBALL_SHA256=bb23e51cd5b5ae56bf946a34992876902de1bb2ecc0f639d59c702c6371adc62
export PD_OVERRIDE_TARBALL_URL="file://$(pwd)/alpine-aarch64-pd-v4.30.1.tar.xz"
# 3. 执行安装
proot-distro install alpine安装过程输出示例:
[*] Installing Alpine Linux...
[*] Creating directory '/data/data/com.termux/files/usr/var/lib/proot-distro/installed-rootfs/alpine'...
[*] Creating directory '/data/data/com.termux/files/usr/var/lib/proot-distro/installed-rootfs/alpine/.l2s'...
[*] Downloading rootfs archive...
[*] URL: file:///data/data/com.termux/files/home/alpine-aarch64-pd-v4.30.1.tar.xz
3.4 配置 proot 环境中的 SSH
3.4.1 进入 proot 环境
# 启动 Alpine Linux(或其他你安装的发行版)
# PROOT_NO_SECCOMP=1: 禁用 seccomp,避免某些系统调用被拦截
# --fix-low-ports: 允许绑定 1024 以下的端口(如 SSH 的 22 端口)
PROOT_NO_SECCOMP=1 proot-distro login alpine --fix-low-ports3.4.2 在 proot 环境中安装 SSH
进入 proot 环境后,根据你的发行版执行相应命令:
# Alpine Linux
apk add openssh
# Arch Linux
pacman -Syu openssh
# Ubuntu/Debian
apt install openssh-server3.4.3 配置 SSH 端口和权限
为什么要改端口? Termux 已经在 8022 端口运行了 SSH 服务,proot 环境需要使用不同的端口(如 2022)。
# 编辑 SSH 配置文件
nano /etc/ssh/sshd_config
# 找到 "Port 22" 这一行,修改为:
# Port 2022
# (可选)允许 root 用户通过密码登录
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
# 设置 root 密码
passwd
# 启动 SSH 服务
/usr/sbin/sshd3.4.4 使用 VSCode/Cursor 连接
- 首次连接建议使用 VSCode(Cursor 可能需要 VSCode 先建立连接)
- 在 VSCode 中安装 "Remote - SSH" 插件
- 添加 SSH 配置:
Host termux-alpine
HostName <手机IP地址>
Port 2022
User root- 连接到
termux-alpine - 连接成功后,Cursor 也可以使用相同配置连接
3.5 理解多个 SSH 服务共存
你可能会疑惑: 为什么有两个 SSH 服务?
- Termux SSH(8022 端口):直接运行在 Termux 环境中
- proot SSH(2022 端口):运行在 proot 的 Linux 发行版中
重要特性:
- proot 是"用户态"虚拟化,所有进程都运行在 Termux 的用户空间
- 在 proot 中执行
kill命令,可能会影响到 Termux 的进程 - 这个特性确保了不会对 Android 系统造成任何修改,非常安全
第四步:配置开机自动启动(可选)
如果你想让手机重启后自动启动 SSH 服务和 Docker 容器,可以配置开机自启动。
4.1 安装 Termux:Boot
Termux:Boot 是一个允许 Termux 在开机时运行脚本的应用。
下载地址: https://wiki.termux.com/wiki/Termux:Boot
安装步骤:
- 从 F-Droid 下载并安装 Termux:Boot
- 打开 Termux:Boot 应用,授予必要的权限
- 在 Android 系统设置中,给 Termux:Boot 完整的自启动权限
4.2 创建启动脚本
4.2.1 创建脚本目录
mkdir -p ~/.termux/boot/4.2.2 创建 SSH 自启动脚本
nano ~/.termux/boot/start-alpine-sshd.sh脚本内容:
#!/data/data/com.termux/files/usr/bin/sh
# 保持 CPU 唤醒,防止锁屏后断网
termux-wake-lock
# 启动 Termux 的 SSH 服务(8022 端口)
sshd
# 启动 proot 环境中的 SSH 服务(2022 端口)
# -D: 在前台运行(适合开机自启)
# -e: 输出日志到 stderr
PROOT_NO_SECCOMP=1 proot-distro login alpine -- /usr/sbin/sshd -D -e &
# 在这里添加其他需要自启动的服务
# 例如启动 udocker 容器:
# udocker run --volume "my-dir:my-dir" --rm my-container &赋予执行权限:
chmod +x ~/.termux/boot/start-alpine-sshd.sh4.3 添加 udocker 容器自启动
如果需要自动启动 Docker 容器,可以创建额外的启动脚本:
nano ~/.termux/boot/start-docker-containers.sh#!/data/data/com.termux/files/usr/bin/sh
# 等待网络就绪
sleep 10
# 启动你的容器
udocker run --volume "/data/mydata:/data" --rm my-database &chmod +x ~/.termux/boot/start-docker-containers.sh4.4 更多 Termux 服务
Termux 官方还提供了一些内置服务管理工具,你可以参考:
官方文档: https://wiki.termux.com/wiki/Termux-services

Cheat Sheet
#强行杀掉所有sshd
pkill -f sshd
遇到报错开启 udocker -D,把trace丢给Gemini