夜雨聆风学习资料网

ARTICLE · 1308645

闲置安卓手机跑 Docker?

闲置安卓手机跑 Docker?

闲置 Android 手机,除了塞抽屉里,还可以运行 Docker!

这是 @BHznJNs 同学在论坛带来的新玩具:termux-containers,原文:https://meta.appinn.net/t/topic/94920

termux-containers

这个叫 termux-containers 的开源项目,它让你能够像在 Linux 服务器上部署 Docker 服务一样,在 Android 手机上部署一些 Linux 应用,而且无需 Root 权限。

比如,在手机上运行一个 Nginx 镜像,托管网站!虽然没什么用,但很酷啊。

特性

  • • 不需要 Root 手机
  • • 不需要安装 Docker Engine
  • • 不需要常驻 Docker 守护进程
  • • 使用 YAML 文件管理多个服务
  • • 支持启动、停止、查看运行状态
  • • 支持挂载文件和目录,保存应用数据

工作原理

Android → Termux → PRoot-Distro → OCI 镜像 → Linux 应用

Termux 是一款 Android 上的终端模拟器和 Linux 环境,可以直接在手机上使用命令行工具。

PRoot-Distro 是 Termux 生态中的 Linux 环境管理工具,可以让 Android 手机在无需 Root 的情况下运行 Ubuntu、Debian 等 Linux 发行版,以及兼容的 OCI 容器镜像。

OCI 镜像 则是开放标准的容器镜像,如今 Docker Hub 上的大量 Docker 镜像都采用 OCI 兼容格式。

当然,它与真正的 Docker 仍然有区别:PRoot 不提供 Docker 那样的内核级容器隔离,也无法运行所有 Docker 镜像。

但对于一些轻量级服务来说,这已经很有吸引力了。

能干什么?

青小蛙觉得,最有意思的玩法就是:把闲置 Android 手机变成一台低功耗的小服务器。

除了上面提到的没什么用的网站,下面这个倒是不错:

运行 Cloudflare Tunnel

这是项目官方提供的另一个示例。

Cloudflare Tunnel 可以让手机主动连接 Cloudflare,从而让外部用户通过域名访问手机上的服务。相当于实现了内网穿透。

自托管项目

现在 AI 这么方便了,随便写点什么代码都非常容易,

  • • 运行家庭消息转发机器人
  • • Node.js 轻量级应用
  • • 简单的 Webhook 接收服务
  • • Aria2 / yt-dlp 等下载工具

甚至,可以在没有 NAS、小主机的情况下,使用安卓手机替代一部分 NAS 功能。

怎么干?

首先需要在 Android 手机上安装 Termux。

然后打开 Termux,执行:

pkg update
pkg install git
git clone https://github.com/BHznJNs/termux-containers ~/termux-containers
cd ~/termux-containers
bash install.sh

安装脚本会配置 Python、PRoot、PRoot-Distro 等依赖,并创建 termux-containers 命令。

第一步:创建一个容器配置(Nginx 为例)

安装完成后,编辑项目目录里的 containers.yaml:

nano ~/termux-containers/containers.yaml

填入下面的配置:

services:
  web:
    image: nginxinc/nginx-unprivileged:stable-alpine
    enabled: true
    volumes:
      - type: directory
        source: ./data/web
        target: /usr/share/nginx/html
    environment:
      PORT: "8080"

第二步:放入一个网页

执行:

mkdir -p ~/termux-containers/data/web
echo '<h1>Hello from Android!</h1>' > ~/termux-containers/data/web/index.html

这样就创建了一个简单的网页。

第三步:启动容器

执行:

termux-containers apply

工具会读取 YAML 配置,安装缺失的镜像,并尝试启动服务。

之后可以执行:

termux-containers status

查看服务状态。

还可以使用:

termux-containers stop web
termux-containers start web

停止或者重新启动服务。

如果 Nginx 成功启动并监听 8080 端口,就可以在手机浏览器里访问:

http://127.0.0.1:8080

这个非常有意思,你能想象到一台随便拿着走的手机,托管着一个网页,连上网,就能访问。

这让青小蛙想起这个项目:有人用 Wi-Fi 灯泡改造了一个《禁书图书馆》

使用限制

它无法使用所有的 Docker 镜像,有几个限制:

  • • 需要 ARM64架构
  • • 没有 Docker 式的端口映射。 PRoot 与 Termux 共享网络。
  • • 没有完整的容器安全隔离。 应当只运行可信镜像。
  • • 后台运行受 Android 限制。 手机休眠或系统清理后台时,服务可能中断。

青小蛙觉得

termux-containers 让闲置手机在服务器托管方面更加容易了。

那么有没有一种可能,将多台闲置手机都连接起来,组成一个手机服务器集群,甚至搞出一个手机版本的 k8s(Kubernetes,容器编排系统),统一管理这些手机上的容器服务。

然后,变身家用迷你数据中心。

想法还是挺酷的,也不知道有没有可能实现。

获取

  • • GitHub https://github.com/BHznJNs/termux-containers

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料