很多人的抽屉里都躺着一台旧安卓手机:系统停在 Android 7/8,运存只有 2GB,装两个 App 就卡,但它实际上还能干一件大事——在局域网里当一个 NAS 或者轻量服务器。
旧安卓手机改 NAS 这件事,真正的分水岭不是“能不能装个共享文件夹”,而是“能不能把一个完整的 Linux 环境跑起来,并且进一步把 Docker 跑起来”。一旦 Docker 能用,文件共享、网页管理、下载工具、内网服务都可以用标准容器方式部署,跟云服务器上的体验几乎一致。这也是本文标题强调“安装 Docker 篇”的原因:它不是 NAS 系列的第一步,而是决定这个 NAS 上限的关键一步。
先给出一个明确判断:旧安卓手机跑 Docker 是可以实现的,但难度不在 Docker 本身,而在你用什么方式给它提供一个 Linux 用户态环境。 免 Root 的 Termux + proot 方案适合尝鲜,但 Docker 兼容性有限;Root + chroot 方案更接近真实服务器,稳定性明显更好。这篇文章会把两条路线都讲透,并给出 NAS 场景下的容器部署示例。
读完你会掌握:如何从 F-Droid 安装 Termux,如何用 proot-distro 装 Ubuntu,如何在 Linux 环境里安装 Docker,哪类手机会卡在哪个环节,跑起来之后怎么用 FileBrowser 和 Samba 提供 NAS 服务,以及最重要的——哪些坑不要踩。
1. 这篇文章真正要解决的问题
1.1 旧手机改 NAS 的真实收益
先算一笔账。一台普通的旧安卓手机,日常待机功耗在 2W 到 5W 之间,加上充电器的转换损耗,每个月电费基本可以忽略。对比一台老台式机常驻运行的 50W 到 100W 功耗,手机方案在电费上是碾压级别的。
在硬件投入上,它也是零成本。你不需要买树莓派、不需要买硬盘,手里那台淘汰手机本身就是一套完整的 ARM 微型主机:有 CPU、有内存、有闪存、有 Wi-Fi、有屏幕,甚至自带电池 UPS。对于“家庭实验室”和“内网服务”这类轻量场景,它的配置并不算可怜。
这就是第一个需要纠正的误区:“手机性能太差,当不了服务器”是错的。 NAT 场景真正吃的是网络稳定性、存储可靠性和长时间运行的散热能力,而不是峰值算力。手机上的 ARM 处理器跑 Samba、跑 FileBrowser、跑轻量 Web 服务绰绰有余。
1.2 合格的 NAS 服务器标准
说“手机能当 NAS”,不能只看它能开机。一个合格的 NAS 至少要满足四个条件:
- 能提供稳定的文件共享服务(SMB、WebDAV、FTP 或者 Web 文件管理)。
- 能长时间不关机,并且断电后能自动恢复服务。
- 能灵活扩展服务,比如加个下载器、加个相册备份、加个监控存储。
- 数据不能因为设备本身故障而直接丢失。
前两条是“能不能用”的底线,第三条是“好不好用”的分水岭,第四条是很多人忽略的安全底线。
在这四个条件里,Docker 解决的核心问题是第三条:它把“在手机 Linux 环境里手工安装各种服务”变成了“下载镜像、跑容器、统一管理”。你可以像操作一台云服务器一样操作这台旧手机,而不用关心某个软件的依赖冲突、配置文件散落和卸载残留。
1.3 本文的边界与读者定位
本文定位是“旧安卓手机改 NAS”系列的 Docker 安装篇,默认你已经有一台能正常开机、能联网、能连接充电器的旧安卓手机。重点覆盖两条技术路线的完整操作:免 Root 的 Termux + proot 路线,以及 Root + Linux Deploy 的 chroot 路线。
适合读这篇文章的人有三类:
- 手里有旧安卓手机,想低成本搞一台家庭 NAS 的折腾型用户。
- 熟悉 Docker,但不确定 Android 手机能不能跑 Docker 的开发者。
- 已经照着网上的碎片教程走到一半,卡在 Docker 启动失败的初学者。
不适合读这篇文章的人也有:如果你希望 NAS 跑满千兆网络、跑到万兆速率,或者要保存非常重要的数据,那去买群晖或者自己组台 TrueNAS 更合理。手机 NAS 是玩具,但它是能让你学到最多东西的玩具。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安卓手机跑 Docker 的核心原理
2.1 Android 和桌面 Linux 的关系
Android 底层确实是 Linux 内核,它和桌面 Linux 共享进程调度、内存管理、文件系统等内核能力。但操作系统的“用户态”差别巨大:Android 使用 Bionic C 库,没有 glibc;没有 systemd 作为初始化系统;没有 apt、yum 这类包管理器;App 跑在 ART 运行时之上,而不是直接跑普通 Linux 可执行文件。
这就导致一个局面:你拿着一个 Linux 内核,却没办法直接执行一个为 Debian/Ubuntu 编译的普通二进制文件,更不用说让 Docker daemon 自己跑起来。Docker 需要一整套标准的 Linux 用户态:/lib 下的动态链接库、/proc 和 /sys 的文件系统布局、cgroups 和 namespaces 等内核特性。
这个原理决定了所有“安卓手机跑 Docker”方案的实质:先给手机创造一个完整的 Linux 用户态环境,再在这个环境里安装 Docker。
2.2 为什么经常有人失败
网上大量教程只写了“安装 Termux → 安装 proot-distro → 安装 Docker”,然后就没有然后了。你照着敲,大概率会遇到类似下面的错误:
text复制Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
或者 dockerd 启动后日志里出现 cgroup、namespaces、overlayfs 相关的错误。
原因很简单:proot 是一个用户态系统调用模拟层,它通过拦截和翻译系统调用来模拟一个 Linux 根文件系统环境,但它没法完整模拟内核的 cgroups、mount namespace、overlayfs 等能力。而 Docker 容器恰恰高度依赖这些内核特性。不是你的命令敲错了,而是这个方案本身的天花板就在那里。
2.3 两条主流路线
理解了上面的原理,就能明白为什么会有两条路线:
路线 A:免 Root —— Termux + proot-distro
Termux 是一个 Android 终端模拟器,提供了包管理器和一套基础 Linux 工具。proot-distro 是它的辅助脚本,能在不修改系统的情况下用 proot 模拟运行完整的 Ubuntu/Debian 发行版。
优点是不需要 Root、安装快、风险低;缺点是 proot 模拟层有性能损失,Docker 的兼容性存在硬伤。适合先用最小成本跑通流程,验证“这台手机到底能不能当服务器”。
路线 B:Root + chroot —— Linux Deploy
Linux Deploy 是安卓上一个能在 chroot 环境里部署完整 Linux 发行版的工具。Root 之后,它可以挂载真正的 Linux 根文件系统,用 chroot 切换到里面。相比 proot,chroot 环境更接近真实 Linux,没有系统调用翻译层,Docker 的成功率明显更高。
缺点是必须 Root,操作要小心,而且不同手机的 Root 方式差异大。
2.4 方案对比
| 方案 | 是否需求 Root | Linux 完整性 | Docker 可用性 | 上手难度 | 推荐场景 |
|---|---|---|---|---|---|
| Termux + proot-distro | 否 | 较好(用户态模拟) | 受限,简单容器可尝试 | 低 | 尝鲜、轻量服务 |
| Linux Deploy + chroot | 是 | 完整(真实 chroot) | 较好,仍受安卓内核限制 | 中 | 长期稳定运行 |
| 刷第三方桌面 Linux | 是 | 最完整 | 接近原生 | 高 | 进阶玩家 |
从社区反馈来看,大部分“手机 NAS 跑了一年多”的案例集中在方案 B 或者直接刷桌面 Linux 的机器上。方案 A 更多是验证原理。这篇文章先讲方案 A,因为它的门槛最低;再讲方案 B,因为它是真正能长期稳定服役的方案。
3. 旧安卓手机选型与前置准备
3.1 硬件底线
不是所有旧手机都适合改 NAS。下面的条件决定你在这条路上能走多远:
- Android 版本:建议 Android 7 及以上。太老的系统权限模型复杂,Termux 和 Linux Deploy 在 Android 5/6 上都有兼容性问题。
- 内存:至少 2GB,最好 3GB 以上。Linux 系统本身占 300MB 左右,Docker daemon 又要占一部分,跑两三个容器后 1GB 内存会非常紧张。
- 架构:优先选择 arm64(arm64-v8a)设备。现在绝大多数旧手机都是 arm64,但个别上古机型是 32 位 ARM,很多现代软件包已经不提供 32 位镜像。
- 网络:如果手机只支持 2.4GHz Wi-Fi,且路由器离得远,那网络带宽会非常不稳定。最理想的方案是使用 USB 转 RJ45 以太网适配器,或者至少支持 5GHz Wi-Fi。
- 存储:内部闪存 16GB 以上,否则装完 Linux 和 Docker 镜像后空间会很紧张。数据盘建议通过 OTG 外接 U 盘或移动硬盘。
3.2 存储规划
NAS 的核心是数据。旧安卓手机的内置存储通常不大,而且电池供电的手机不适合频繁拔插。建议的存储架构是:
- 系统盘:手机内置闪存,跑 Linux 和 Docker。
- 数据盘:OTG 外接的 USB 3.0 U 盘或移动固态盘,用于存放 Samba 共享的内容。
这里有一个重要提醒:外接存储的格式兼容性。安卓原生支持 FAT32 和 exFAT,但 FAT32 不支持超过 4GB 的单文件,exFAT 在 Linux 环境里可能需要安装 exfat-fuse 才能读写。更稳妥的做法是把数据盘格式化为 ext4,但这会让数据盘在 Windows 上无法直接读取。你需要根据自己的使用场景做取舍。
在后续的 Linux 环境里,Android 的 /sdcard 目录通常可以直接访问;如果使用 Linux Deploy 的 chroot 环境,需要在配置里把 /sdcard 挂载进去,否则 Linux 里看不到手机内部存储。
3.3 供电与散热
这是整个方案里最容易被忽略、但最重要的前置条件。
手机长时间插着充电器运行,电池长时间处于满电状态会加速老化,极端情况下还会鼓包。如果电池已经鼓包,请立即停止使用,不要继续折腾。
推荐的供电方案有三种:
- 手机支持电池拆卸:直接拔掉电池,利用某些型号支持“无电池供电”的特性,或购买假电池模块。
- 使用充电限制类 App:在 Root 环境下用 Battery Charge Limit 等工具把充电上限控制在 60%-80%。
- 最朴素的做法:找一台电池还健康的旧手机,设置一个定时插座,白天充电晚上断电,降低电池持续满电的时间。
散热方面,手机在持续负载下发热明显。不要把它塞进抽屉,最好放在通风处,或者垫一个散热底座。如果长期 60℃ 以上运行,CPU 会降频,服务响应会变慢。
3.4 网络准备
给手机分配一个固定内网 IP。在路由器后台把手机的 MAC 地址和 IP 绑定,或者直接在手机里设置静态 IP。否则手机重启后 IP 变化,你所有依赖固定地址的客户端配置都要跟着改。
同时建议在路由器上做两件事:一是开启 UPnP 或者手动端口转发(如果你想从外网访问),二是定期重启路由器以释放 DHCP 租约。对于家庭环境,内网访问为主就足够了,外网访问涉及更多安全风险,本文不做推荐。
4. 路线 A:免 Root —— Termux + proot-distro 跑 Docker
4.1 安装 Termux
Termux 的官方推荐安装来源是 F-Droid,不是 Google Play。Google Play 版本的 Termux 长期停留在旧版,而且因为 Android 10 左右的政策变化,Play 版已经无法正常更新,很多新功能不可用。
操作步骤如下:
- 在手机浏览器访问 F-Droid 官网,下载安装 F-Droid 客户端。
- 在 F-Droid 中搜索 Termux,安装最新版。
- 打开 Termux,等待自动初始化完成。
初始化过程中,如果遇到“termux”命令找不到,或者 apt 源连不上,通常是因为网络环境或源地址问题。建议先执行下面的命令刷新源并升级所有包:
bash复制pkg update && pkg upgrade -y
这一步时间取决于网络状况,可能需要几分钟。如果下载失败,可以多试几次,或者去 Termux 的官方镜像配置页面切换镜像源。
4.2 配置存储权限
Termux 默认不能直接访问 Android 的共享存储。执行一次存储授权命令:
bash复制termux-setup-storage
手机会弹出一个存储权限窗口,点击允许。执行成功后,Termux 的 ~/storage 目录下会出现 shared、downloads、dcim 等符号链接,指向对应的 Android 目录。
这一步的主要目的是让后续 Linux 环境能访问手机里的文件,作为 NAS 共享内容的一个来源。
4.3 安装 proot-distro 并部署 Ubuntu
proot-distro 是一个在 Termux 里管理 proot 发行版的脚本工具。安装并列出可用发行版:
bash复制pkg install proot-distro -y
proot-distro list
输出里会看到 Ubuntu、Debian、Arch Linux 等发行版。这里以 Ubuntu 为例:
bash复制proot-distro install ubuntu
安装过程会下载并解压 Ubuntu 根文件系统。完成后,登录到 Ubuntu 环境:
bash复制proot-distro login ubuntu
登录成功后,命令行提示符会变化。先更新软件源:
bash复制apt update && apt upgrade -y
到这里,你已经拥有一个“能用的 Linux 用户态环境”了。可以用 uname -a 看看内核信息,注意输出里显示的其实还是安卓内核,因为你运行在一个模拟层之上。
4.4 在 Ubuntu 里安装 Docker
在 proot 的 Ubuntu 环境里安装 Docker 有两种方式:安装发行版自带的 docker.io,或者安装 Docker 官方源。建议先用 docker.io,因为它的依赖与发行版集成最好:
bash复制apt install -y docker.io docker-compose
安装完成后尝试启动 Docker daemon:
bash复制dockerd --storage-driver=vfs &
这里的关键参数是 --storage-driver=vfs。Docker 默认的 overlay2 存储驱动依赖内核的 overlayfs 支持,而 proot 环境里通常会失败。vfs 驱动是一个最简单的文件系统驱动,不依赖特殊内核特性,代价是镜像占用空间大、容器创建较慢。
启动后,等待几秒钟,然后验证:
bash复制docker info
docker version
如果 docker info 能显示 Server 端信息,说明 daemon 已经起来了。接下来试着跑一个最简单的容器:
bash复制docker run --rm hello-world
这一步是判断路线 A 是否适合你的关键测试。能跑通,说明这台手机上的 proot 环境兼容性不错;跑不通,不要灰心,这是预期内的风险。
4.5 如果 Docker 起不来,问题在哪里
从大量社区反馈来看,proot 环境下 Docker 最常见的问题是:
- dockerd 启动时报 cgroup 相关错误。
- 容器启动时报 permission denied 或 operation not permitted。
- 端口映射不生效,外部无法访问容器服务。
- 容器内网络异常,ping 不通外网。
这些问题没有一个统一解。你可以尝试 dockerd --iptables=false --bridge=none 让 daemon 先起来,但这会牺牲 Docker 的 NAT 网络能力,只能使用 --network=host 启动容器,这又要求你手动管理端口,体验大打折扣。
更稳妥的判断是:路线 A 适合验证“这台手机能不能当服务器”,如果你想长期稳定跑 Docker 容器,直接跳到方案 B。
即使 Docker 在这台手机上完全跑不起来,你仍然可以用一个折中方案:在 proot 的 Ubuntu 环境里直接安装 Samba、Nginx、Caddy 等软件。它们不依赖 cgroups 和 namespaces,在 proot 中运行的成功率比 Docker 高得多。NAS 基本功能够用,只是没法享受 Docker 的管理便利。
5. 路线 B:Root + Linux Deploy —— 更接近生产环境的方案
5.1 准备工作
路线 B 的核心是用 Root 权限在手机上挂载一个真实的 Linux 根文件系统,然后通过 chroot 进入。相比 proot,它没有系统调用翻译层,Docker 对各种内核特性的访问更直接。
前提条件:
- 手机已经获取 Root 权限(Magisk 或 SuperSU 方案均可)。
- 安装 BusyBox,并在 Linux Deploy 里指定正确的 BusyBox 路径。
- 准备足够的内部存储空间,建议 8GB 以上。
这一路线的难点不在 Linux Deploy 本身,而在 Root 这一步。每台手机的 Root 方案都不一样,刷机、解锁 Bootloader、修补 boot 镜像,属于另一个较大的话题,本文不展开。
5.2 Linux Deploy 配置要点
Linux Deploy 的安装过程主要在 App 界面里完成。打开 App 后,需要配置的关键项如下:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| Distribution | Ubuntu | 软件源丰富,教程多 |
| Architecture | arm64 | App 通常自动检测 |
| Distribution suite | focal / jammy | 选择 LTS 版本 |
| Installation path | /data/local/tmp/chroot | 默认路径,有 Root 权限即可写 |
| Source address | 国内镜像源 | 使用阿里云、中科大等镜像加速 |
| Mounts | /sdcard → /mnt/sdcard | 让 Linux 环境访问手机存储 |
| SSH | 开启 | 方便后续用电脑远程管理 |
配置完成后,点击顶部的“安装”按钮。Linux Deploy 会下载对应发行版的根文件系统,并在指定路径解压。这个过程在网络不稳定的情况下容易中断,建议使用稳定的网络并耐心等待。
安装完成后,点击“启动”按钮。如果界面上显示 “Starting Linux ...” 然后变为 “started” 状态,说明 Linux 环境已经跑起来了。
5.3 进入 Linux 并安装 Docker
在 Linux Deploy 中启用了 SSH 的情况下,你可以直接通过电脑 SSH 登录到这台手机的 Linux 环境:
bash复制ssh android@192.168.1.100
登录后,先检查系统状态并更新软件源:
bash复制uname -a
apt update && apt upgrade -y
接下来安装 Docker:
bash复制apt install -y docker.io docker-compose
service docker start
chroot 环境对 cgroups 的支持仍然依赖安卓内核,但比 proot 好很多。大部分手机上 service docker start 都能成功。验证方式:
bash复制docker info
docker ps
如果 docker info 能正常返回 Server 版本、存储驱动、Cgroup 版本等信息,说明 Docker 环境已经可用了。
5.4 设置开机自启
NAS 的核心要求是“重启后自动恢复服务”。你需要做两件事:
- 在 Linux Deploy 的设置里勾选“开机启动”,或者使用它提供的桌面组件自动启动。
- 在 Linux 环境内通过 systemd 或者 init 脚本设置 Docker 随 Linux 启动。
在 chroot 环境里 systemd 并不总是可用,一个简单可靠的方法是在 Linux Deploy 的启动配置里添加一条命令,让它在每次 Linux 启动后自动执行 service docker start。
到这里,你已经有一个相对稳定的、能跑 Docker 的 Linux 环境了。接下来要看最实际的问题:怎么用它提供 NAS 服务。
6. 用 Docker 搭建 NAS 服务
6.1 目录规划
无论使用哪条路线,容器数据目录都应该提前规划。这里推荐一个最小化的目录结构:
text复制/srv/nas/
├── data/ # 共享文件存放目录
├── config/ # 各容器的配置目录
└── docker/ # docker-compose 文件目录
创建目录:
bash复制mkdir -p /srv/nas/{data,config,docker}
如果你的手机还有外接 OTG 存储,把 data 目录指到挂载点,例如 /mnt/usb_drive/data,这样共享文件不会占用手机内置空间。
6.2 FileBrowser:浏览器管文件
FileBrowser 是一个轻量的 Web 文件管理器,容器镜像简单,很适合作为手机 NAS 的管理入口。在 /srv/nas/docker/filebrowser/docker-compose.yml 中创建:
yaml复制version: "3"
services:
filebrowser:
image: filebrowser/filebrowser:latest
container_name: nas-filebrowser
restart: unless-stopped
ports:
- "8080:80"
volumes:
- /srv/nas/data:/srv
启动容器:
bash复制cd /srv/nas/docker/filebrowser
docker compose up -d
容器启动后,浏览器访问 http://手机IP:8080,默认用户名和密码都是 admin。注意:这台手机是局域网设备,默认密码一定要在首次登录后修改,否则同一局域网里的任何人都能上传和删除文件。
6.3 Samba:局域网文件共享
Samba 是 Windows、macOS、Linux 都能直接访问的文件共享协议。在 /srv/nas/docker/samba/docker-compose.yml 中创建:
yaml复制version: "3"
services:
samba:
image: dperson/samba:latest
container_name: nas-samba
restart: unless-stopped
ports:
- "139:139"
- "445:445"
volumes:
- /srv/nas/data:/share
command: '-s "nas;/share;yes;no;yes;all"'
启动方式同上:
bash复制cd /srv/nas/docker/samba
docker compose up -d
这里的 command 参数含义是:共享名为 nas,目录为 /share,允许浏览,只读为 no,允许匿名访问,用户为 all。
在 Windows 资源管理器地址栏输入:
text复制\\192.168.1.100\nas
如果能正常看到共享目录里的文件,Samba 就成功了。
6.4 用 Docker Compose 统一管理
当手机 NAS 上的容器越来越多,不建议再用单个 docker run 命令管理。统一使用 Docker Compose 的好处是:所有服务的配置都在一个 YAML 文件里,升级时只需要重新执行 docker compose up -d,重启后 restart: unless-stopped 策略会自动拉起容器。
一个包含 FileBrowser 和 Samba 的完整 Compose 文件示例:
yaml复制version: "3"
services:
filebrowser:
image: filebrowser/filebrowser:latest
container_name: nas-filebrowser
restart: unless-stopped
ports:
- "8080:80"
volumes:
- /srv/nas/data:/srv
samba:
image: dperson/samba:latest
container_name: nas-samba
restart: unless-stopped
ports:
- "139:139"
- "445:445"
volumes:
- /srv/nas/data:/share
command: '-s "nas;/share;yes;no;yes;all"'
如果你在 Docker 无法工作的手机上走“直接安装软件”的路线,Samba 也能直接用 apt 安装:
bash复制apt install -y samba
然后在 /etc/samba/smb.conf 末尾追加共享配置:
ini复制[nas]
path = /srv/nas/data
browseable = yes
read only = no
guest ok = yes
create mask = 0644
directory mask = 0755
保存后重启服务:
bash复制service smbd restart
这条路线的管理和自动化能力不如 Docker,但作为 NAS 的基础文件共享功能已经完整。
7. 运行验证与性能预期
7.1 基础验证命令
不管用了哪条路线,下面这些命令都可以用来确认服务状态。
查看 Docker 容器状态:
bash复制docker ps
你会看到 FileBrowser 和 Samba 容器处于 Up 状态。如果容器反复退出,查看日志:
bash复制docker logs nas-filebrowser
docker logs nas-samba
查看系统负载和内存:
bash复制free -h
uptime
在局域网内通过手机或电脑直接访问 FileBrowser 页面,确认 Web 服务正常:
bash复制curl http://192.168.1.100:8080
7.2 局域网访问测试
在电脑上打开资源管理器:
text复制\\192.168.1.100\nas
然后在 nas 共享目录里创建一个测试文件,再从手机 FileBrowser 里确认能看到。如果是双向可读写的,Samba 服务链路就通了。
网络性能上,不要有任何不切实际的期望。旧手机如果走 Wi-Fi,实际吞吐受路由器能力和环境干扰影响很大。更稳妥的判断是:这类手机 NAS 适合存放文档、脚本、配置文件、少量影音资源,不适合当成主力视频剪辑素材库或者多人协作盘。无线网络下跑 20MB/s 到 50MB/s 已经算不错了。
7.3 瓶颈分析
手机 NAS 的性能瓶颈通常按先后顺序排列:
- 网络:Wi-Fi 延迟和丢包对文件共享体验影响最直接。
- 存储:手机内置 eMMC 闪存的随机读写能力远低于 SSD,大量小文件操作会明显变慢。
- 电池和散热:持续高负载下 CPU 降频,导致容器响应变慢。
- 内存:2GB 内存跑 2-3 个容器是舒服的,超过 4 个容器后 OOM 风险显著上升。
这些限制决定了手机 NAS 的定位是“轻量家庭服务器”,不是“性能怪兽”。它最大的价值是用零成本把 Docker 和 Linux 服务器运维的整套流程跑通,让你在真实服务器上遇到问题时已经踩过一遍坑。
8. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Termux 安装包源错误或更新失败 | Play 商店版本过旧、镜像源不可用 | 检查来源是否为 F-Droid | 从 F-Droid 安装最新版,或切换 Termux 镜像源 |
| proot-distro 下载 Ubuntu 中断 | 网络不稳定、压缩包不完整 | 查看下载日志 | 换国内镜像源,或删除安装目录后重新 install |
| dockerd 启动报 cgroup/mount 错误 | proot 无法完整模拟内核特性 | 查看 dockerd 启动日志 | 尝试 --storage-driver=vfs;如果仍失败,改用 chroot 方案 |
| 容器启动时报 operation not permitted | 内核 capabilities 在 proot 环境受限 | 查看容器日志 | 换用轻量容器,或迁移到 Linux Deploy 环境 |
| 局域网访问 FileBrowser 超时 | Docker 端口映射依赖 iptables,proot 环境可能不生效 | 检查 docker ps 端口映射 |
改用 --network=host 启动,或直接访问宿主 Linux 端口 |
| Samba 在 Windows 上无法连接 | SMB 协议版本、防火墙设置 | 检查 Windows SMB 支持和路由器防火墙 | 调整 Samba 配置 server min protocol = SMB2 |
| 手机长时间运行后反应变慢 | CPU 过热降频、内存不足 | 执行 uptime、free -h |
增加散热、减少容器数量、给手机设置定时重启 |
| 电池鼓包或膨胀 | 长时间满电充电 | 观察电池外观和温度 | 立即停止使用,更换电池或改无电池供电方案 |
| 手机重启后容器不自动恢复 | 没有设置 Docker 开机自启 | 检查容器 restart 策略 |
为容器添加 restart: unless-stopped,并配置 Linux Deploy 开机启动 |
排查的总思路是:先看日志,再测连通性,最后下判断。不要一遇到问题就重装系统,大部分问题出在网络和存储配置上。
9. 最佳实践与工程建议
9.1 供电与电池安全
手机 NAS 最有争议的部分就是电池。长期插电使用,电池会一直保持在 100% 状态,加速老化,甚至有鼓包风险。这里有几个现实建议:
- 如果手机电池可拆卸,优先考虑拆电池后纯外接电源运行,彻底排除电池风险。
- 有 Root 权限时,使用 Battery Charge Limit 等工具限制充电上限到 70% 左右。
- 如果电池已经鼓包,不要再充电,更不要尝试修复,立即停用。
供电安全是手机 NAS 项目里唯一涉及人身安全的问题,优先级高于所有功能。
9.2 数据安全与备份
NAS 的第一职责是保护数据。旧手机上跑 NAS,最大的风险恰恰来自设备本身:闪存有寿命、系统可能崩溃、SD 卡和 OTG 盘可能突然消失。
建议建立一个最简单的备份习惯:
- 把重要数据目录用 cron 定期同步到另一台设备。
- 容器的配置目录尽量放在单独目录,方便整体复制。
- Docker Compose 文件本身也要纳入版本管理,至少保留一份拷贝。
一个简单的定时备份命令示例:
bash复制rsync -av /srv/nas/data/ /mnt/usb_backup/data/
把这条命令写入 crontab,每天凌晨执行一次,数据就多了一层保障。
9.3 网络与权限安全
手机 NAS 一旦开放共享,暴露在局域网里的任何设备都可能试图连接。建议做好四件事:
- 修改所有默认密码。FileBrowser 默认 admin/admin,Samba 匿名共享只在初始化阶段使用。
- 设置独立的共享用户,不要用 root 跑业务服务。
- 如果路由器支持访客网络,把手机 NAS 放在主网络内,不要同时挂在多个网段。
- 不要轻易在路由器上开启端口转发。远程访问的收益远小于被扫描攻击的风险。
9.4 容器管理习惯
在手机上跑 Docker,管理习惯比云服务器要更克制:
- 镜像尽量选择 Alpine、slim 等精简版本,节省磁盘和内存。
- 容器数量控制在 3 个以内,多一个容器就多一份内存压力。
- 容器日志默认无限增长,建议在 Compose 里配置日志轮转。
- 每次修改 Compose 配置后先
docker compose config验证语法,再执行 up。
这些习惯在真正的服务器上同样适用,手机 NAS 正好是零成本练习场。
9.5 定期重启与稳定性
手机长时间运行,Wi-Fi 模块、内核驱动和内存碎片化都可能积累问题。一个很实用的做法是给手机设置每周自动重启一次。安卓系统自带的“定时开关机”功能,或者通过 Termux 执行 reboot 都可以。
重启后,只要 Docker 的 restart: unless-stopped 策略配置正确,所有容器会自动恢复,NAS 服务基本无感。
10. 总结与后续学习方向
这篇文章把“旧安卓手机改 NAS”系列中最关键的一环讲清楚了:Docker 不是直接装在 Android 上的,而是必须先准备一个 Linux 环境。免 Root 的 Termux + proot-distro 路线适合验证想法,Root + Linux Deploy 的 chroot 路线更适合长期稳定运行。两条路线里,Docker 能否跑通,取决于这个 Linux 环境对内核特性的访问能力,而不是命令本身。
不要对手机 NAS 的性能抱有不切实际的期待。它最大的价值在于:你可以用一台吃灰的旧手机,零成本地把 Linux 环境搭建、Docker 容器部署、Samba/Web 文件共享、容器日志排查、定时备份这一整套服务器运维流程完整地走一遍。这个经验迁移到云服务器、树莓派、或者真正的 NAS 设备上,都是完全通用的。
接下来的学习方向可以分两条线。一条是继续深入 Linux:学习 systemd、iptables、磁盘管理,把手机 NAS 的管理能力补全。另一条是继续扩展 Docker 应用:加一个 Aria2 下载容器、加一个 RSS 订阅工具、加一个内网监控面板,让它从“能共享文件”进化为“一个真正干活的小服务器”。
无论你最后选择哪条路线,请记住一点:玩归玩,重要数据一定要有备份。手机 NAS 是玩具,但你对数据的责任心不能是玩具级别的。如果你在实操中遇到和本文描述不完全一致的情况,先看日志,再查网络,这两步能解决大部分问题。
