每个人家里抽屉深处,大概率都躺着几台退役的旧 Android 手机。屏幕碎了、电池尿崩了,但主板和 CPU 其实还能打。扔了可惜,卖废品又不值几个钱。
如果你是个喜欢折腾的极客,今天必须给你安利一个堪称 “赛博变废为宝” 的开源神仙项目——termux-containers。
它能让你在不需要 Root 权限、不需要安装 Docker 引擎的情况下,直接在 Android 手机上跑起 Docker 容器(OCI 镜像),把闲置手机变成一台超低功耗的 Linux 微型服务器!
1. 没 Root 也没 Docker,它是怎么跑起来的?
很多老哥可能会问:Android 底层虽然是 Linux,但没有 Root 权限,也没有 Docker 守护进程,怎么跑容器?
termux-containers 巧妙地利用了 Termux 生态里的“套娃”魔法:
Android → Termux → PRoot-Distro → OCI 镜像 → Linux 应用
- Termux 提供了一个强大的终端和 Linux 环境。
- PRoot-Distro 则是核心黑科技,它能在无 Root 环境下模拟出 Ubuntu、Debian 等 Linux 发行版。
- 接着,它利用 PRoot 兼容运行 OCI 标准容器镜像(也就是大家常用的 Docker Hub 里的镜像)。
⚠️ 避坑提示:它和真正的 Docker 还是有区别的。PRoot 提供的是用户态的模拟,而不是内核级的 cgroups/namespace 隔离,所以它不能跑所有需要特权模式的 Docker 镜像。但对于跑轻量级 Web 服务、脚本、下载工具来说,简直完美!
2. 旧手机能拿来干嘛?(应用场景大赏)
把手机变成服务器后,你可以用它干很多“很酷且实用”的事情:
🌐 整活:跑个 Nginx 托管网站
虽然用手机建站没啥实际商业价值,但当你用外网访问到由你旧手机托管的网页时,那种极客的成就感是无与伦比的。
🚇 神器:运行 Cloudflare Tunnel(内网穿透)
这是官方极力推荐的玩法!在手机上跑一个 cloudflared 容器,主动连接 Cloudflare 边缘节点。你不需要公网 IP,也不需要买昂贵的内网穿透服务,就能让外部用户通过域名直接访问你手机上的服务,或者穿透到你家里的局域网。
🤖 实用:自托管轻量级服务
- 跑一个 Node.js 应用或 Webhook 接收服务。
- 部署一个 家庭消息转发机器人(比如 Telegram/Discord Bot)。
- 运行 Aria2 或 yt-dlp,把旧手机变成 24 小时不关机的低功耗下载机。
- 甚至在没有 NAS 的情况下,挂载个硬壳 U 盘,替代一部分轻量级 NAS 的功能。
3. 保姆级实操指南:如何优雅地部署?
termux-containers 最大的亮点是引入了类似 docker-compose 的 YAML 声明式配置,让你告别繁琐的命令行敲击。
第一步:安装工具
在手机上安装好 Termux,打开终端执行以下命令:
pkg install git python
git clone https://github.com/BHznJNs/termux-containers ~/termux-containers
cd ~/termux-containers
bash install.sh
(脚本会自动安装依赖、创建命令入口,并配置 Termux 启动时自动加载环境。)
第二步:编写 YAML 配置文件
在仓库根目录编辑 containers.yaml。语法和 Docker Compose 极其相似!
示例 A:跑一个 Nginx 网页服务器
services:
web:
image: nginxinc/nginx-unprivileged:stable-alpine
enabled: true
volumes:
- type: directory
source: ./data/web
target: /usr/share/nginx/html
environment:
PORT: "8080"
(把你想展示的 HTML 文件扔进 ./data/web 目录即可。)
示例 B:跑 Cloudflare Tunnel 内网穿透
services:
cloudflared:
image: cloudflare/cloudflared:latest
command:
- tunnel
- --no-autoupdate
- run
- --token
- YOUR_TUNNEL_TOKEN # 换成你自己的 Token
第三步:一键启动
配置好后,只需一句命令,工具就会自动拉取镜像并启动服务:
termux-containers apply
4. 常用“黑话”命令速查
这套工具封装了一套非常符合直觉的 CLI 命令:
termux-containers status:查看所有服务的运行状态(类似docker ps)。termux-containers start [服务名]:启动服务。termux-containers stop [服务名]:停止服务(数据保留)。termux-containers apply:核心命令,应用配置。如果有新服务就安装,有修改就重启,禁用的就停掉。
5. 极客避坑指南(必看)
- 数据持久化是灵魂:PRoot 容器在重建时,未挂载的数据会全部丢失!所以一定要用
volumes把配置文件和数据目录挂载到手机本地(如./data/xxx)。 - 端口映射的幻觉:在 YAML 里写的
PORT: "8080"是传给容器内部的环境变量,不是端口映射。PRoot 环境下,容器内的端口通常直接暴露在 Termux 的 localhost 上,你直接用127.0.0.1:8080访问即可。 - 镜像兼容性:尽量使用
alpine或轻量级的官方镜像(如nginx-unprivileged),避免使用需要 systemd 或特权模式的庞大镜像。
把淘汰的旧手机插上电,连上 Wi-Fi,让它静静地躺在弱电箱里跑着你的私人 Bot 和下载机,这大概就是数码玩家独有的浪漫吧。

