Docker 是服务端部署的事实标准,但很少有人想到——安卓手机也能跑 Docker。不需要 root 权限,不需要刷机,一台普通的安卓手机就能运行 nginx、MySQL、Redis 等容器。
这意味着你可以把手机变成随身携带的微型服务器,测试环境、演示项目、甚至跑一些轻量级的生产服务。
前置条件
- 安卓 7.0 及以上
- 至少 4GB RAM(推荐 6GB+)
- 10GB 以上空闲存储空间
- 手机无需 root
安装 Termux(从 F-Droid):
termux-change-repo
pkg update && pkg upgrade -y
pkg install proot-distro -y安装 Ubuntu + Docker
Docker 需要完整的 Linux 内核特性,Termux 原生环境做不到,所以用 proot-distro 跑一个 Ubuntu:
proot-distro install ubuntu
proot-distro login ubuntu进入 Ubuntu 后安装 Docker:
apt update && apt upgrade -y
apt install docker.io docker-compose -y启动 Docker 守护进程:
dockerd > /tmp/dockerd.log 2>&1 &验证是否正常:
docker info
docker run hello-world如果看到 "Hello from Docker!",说明 Docker 运行成功了。
实战一:跑一个随身 Nginx 网站
拉取 Nginx 镜像并启动:
docker pull nginx:alpine
docker run -d --name web -p 8888:80 nginx:alpine手机浏览器访问 http://localhost:8888,看到 Nginx 欢迎页。
挂载自定义网页目录:
mkdir -p ~/mysite
echo '<h1>Hello from Android Docker!</h1>' > ~/mysite/index.html
docker rm -f web
docker run -d --name web -p 8888:80 -v ~/mysite:/usr/share/nginx/html nginx:alpine刷新页面,看到自己写的内容。一个随身网站就这么简单。
实战二:MySQL + WordPress 一键部署
用 docker-compose 编排多容器服务。创建 docker-compose.yml:
version: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
ports:
- "3307:3306"
volumes:
- ./mysql-data:/var/lib/mysql
wordpress:
image: wordpress:latest
depends_on:
- db
ports:
- "8889:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wp-content:/var/www/html/wp-contentdocker-compose up -d打开 http://localhost:8889,一个完整的 WordPress 站点已经在手机上跑起来了。
实战三:Redis + Node.js 缓存服务
# 启动 Redis
docker run -d --name redis -p 6379:6379 redis:alpine
# 测试连接
apt install redis-tools -y
redis-cli -h localhost ping
# 返回 PONG配合 Node.js 应用做缓存,手机也能跑完整的后端技术栈。
性能实测
测试设备:小米 13(骁龙 8 Gen 2,12GB RAM)
| 场景 | 内存占用 | CPU 占用(空闲) | 备注 |
|---|---|---|---|
| 仅 Docker 守护进程 | ~200MB | ~1% | 非常轻量 |
| Nginx 单容器 | ~50MB | ~0% | Alpine 镜像极小 |
| MySQL 8.0 | ~450MB | ~3% | 建议限制内存 |
| WordPress (MySQL+Nginx+PHP) | ~800MB | ~5% | 足够运行 |
| 同时跑 5 个轻量容器 | ~1.2GB | ~8% | 12GB RAM 完全够用 |
中端机(6GB RAM)最多建议同时跑 2-3 个轻量容器,MySQL 这类吃内存的建议设 --memory=512m 限制。
常见问题
Q: dockerd 启动报错?
proot-distro 环境下不支持 overlay2 存储驱动。如果报错,改用 vfs(性能差但兼容性好):
dockerd --storage-driver=vfs > /tmp/dockerd.log 2>&1 &或编辑 Docker daemon 配置 /etc/docker/daemon.json:
{"storage-driver": "vfs"}Q: 容器网络不通?
proot-distro 的网络是共享宿主 Termux 的,一般不需要额外配置。如果 --net=host 模式报错,用默认 bridge 模式加端口映射即可。
Q: 手机关屏后 Docker 停止?
这是 Android 的电池优化机制。解决方法:
- 在系统设置中关闭 Termux 的电池优化
- 在 Termux 中执行
termux-wake-lock获取唤醒锁 - 让 Termux 在前台运行(或使用通知常驻)
与 Termux 原生服务的对比
| 维度 | Termux 原生 | Docker |
|---|---|---|
| 安装复杂度 | pkg install 直接装 | 需要 proot-distro + Docker |
| 隔离性 | 无隔离 | 容器级隔离 |
| 版本管理 | 依赖仓库版本 | 任意版本随意切换 |
| 迁移/复制 | 手动配置 | docker-compose 一键部署 |
| 资源占用 | 低 | 中等(守护进程 ~200MB) |
建议:日常小工具用 Termux 原生(比如 Python 脚本),需要多服务编排或特定版本时用 Docker。
实际用途
- 随身演示环境:见客户时掏出手机跑项目 Demo
- 学习 Docker:没有服务器也能实操 Docker/K8s
- 测试环境:开发新服务前先在手机上验证概念
- 应急服务:主力服务器挂了,手机临时顶上
一台安卓手机,装上 Docker,就是一台口袋里的微型服务器集群。