抽屉里吃灰的旧手机别扔!装上这个开源神器Termux containers,免 Root 秒变低功耗 Linux 服务器缩略图
DISCOVER SOMETHING GOOD

Termux containers

它能让你在不需要 Root 权限、不需要安装 Docker 引擎的情况下,直接在 Android 手机上跑起 Docker 容器(OCI 镜像),把闲置手机变成一台超低功耗的 Linux 微型服务器!

GitHub 仓库
支持平台
安卓

每个人家里抽屉深处,大概率都躺着几台退役的旧 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. 极客避坑指南(必看)

  1. 数据持久化是灵魂:PRoot 容器在重建时,未挂载的数据会全部丢失!所以一定要用 volumes 把配置文件和数据目录挂载到手机本地(如 ./data/xxx)。
  2. 端口映射的幻觉:在 YAML 里写的 PORT: "8080" 是传给容器内部的环境变量,不是端口映射。PRoot 环境下,容器内的端口通常直接暴露在 Termux 的 localhost 上,你直接用 127.0.0.1:8080 访问即可。
  3. 镜像兼容性:尽量使用 alpine 或轻量级的官方镜像(如 nginx-unprivileged),避免使用需要 systemd 或特权模式的庞大镜像。

把淘汰的旧手机插上电,连上 Wi-Fi,让它静静地躺在弱电箱里跑着你的私人 Bot 和下载机,这大概就是数码玩家独有的浪漫吧。

GOOD TOOLS ARE BETTER TOGETHER

分享到社交平台

微微博QQQ 好友☆QQ 空间XX↗Telegram

复制链接后,也可以粘贴到微信或其他社交平台。