不少玩家在 NAS(群晖、绿联、飞牛等)上用 Docker 跑安卓容器,做成云手机,内网访问http://NAS内网IP:6080打开 noVNC 网页很顺畅。但离开家里 WiFi,外网就无法连接。
NAS 外网访问 Docker 云手机最大难点:家用宽带大多没有公网 IP;就算拿到公网 IP,直接端口转发裸奔风险极高。
本文提供 3 套可行方案,从简单到进阶,同时讲端口、权限、虚拟化前置条件、高频排错。

端口说明: 6080 → noVNC 网页画面访问 5555 → ADB 调试端口,自动化脚本使用

前置准备(NAS 必须先满足)

  1. NAS 开启KVM 硬件虚拟化(BIOS / 系统设置内打开,不开启容器安卓会卡顿、黑屏)
  2. Docker 管理器正常运行,拉取安卓镜像(budtmo/docker-android,或者云手机容器镜像)
  3. NAS 内网固定 IP,路由器设置静态 IP,防止 IP 重启变动
  4. 容器启动命令示例(NAS 的 Docker 界面可以直接用,带 VNC 密码)
docker run -d \
  --device /dev/kvm \
  -p 6080:6080 \
  -p 5555:5555 \
  -e VNC_PASSWORD="自定义密码" \
  -e ANDROID_VERSION=11 \
  --name nas-android \
  budtmo/docker-android
内网测试:浏览器打开http://NAS内网IP:6080,能正常进入安卓页面,再配置外网。内网不通,外网不可能成功。

方案一:路由器端口转发(需要公网 IP,谨慎使用)

适用:宽带运营商分配公网 IP,光猫改为桥接模式,路由器拨号。

操作步骤

  1. 路由器后台,添加端口转发规则:外部端口 6080 转发到 NAS 内网 IP:6080;如需 ADB,增加 5555 转发。
  2. 配置 DDNS 域名(群晖 DDNS、阿里云域名等),动态 IP 自动解析。
  3. NAS 防火墙放行 6080 端口。

✅优点:延迟低,带宽不受第三方隧道限制。
❌缺点:安全风险大,公网直接暴露端口,会被全网扫描。ADB 5555 端口严禁直接对外映射。

提示:不推荐直接端口转发,优先内网穿透,自带鉴权机制,规避裸端口风险。

方案二:内网穿透(推荐,无公网 IP 首选|FRP)

绝大多数家庭 NAS 没有公网 IP,FRP 是最稳定的自建隧道方案。
原理:一台有公网 IP 的云服务器运行 frps 服务端;NAS 部署 frpc 客户端,建立加密隧道,外网访问云服务器端口,流量转发到 NAS 本地 6080。

frpc 配置(NAS 端 frpc.ini)

[common]
server_addr = 你的云服务器公网IP
server_port = 7000
token = 自定义密钥

[android-vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 6080
remote_port = 16080
  1. 云服务器部署 frps,放行 7000、16080 端口安全组
  2. NAS 的 Docker 中部署 frpc 容器,加载配置文件,开机自启
  3. 外网访问:http://云服务器公网IP:16080

✅优点:不需要公网 IP;隧道加密,隐藏 NAS 真实内网 IP;性能稳定,适合长期挂机。
❌缺点:需要一台云服务器做中转,需要简单维护。

方案三:一键商用穿透(cpolar / 花生壳,新手快速上手)

不想部署 frp 服务端,直接在 NAS Docker 安装 cpolar、花生壳,图形界面添加映射。
映射参数:

  • 协议:HTTP
  • 本地地址:NAS 内网 IP,端口 6080
    创建隧道,直接生成公网访问域名。

✅优点:开箱即用,无需云服务器,新手最快上手。
❌缺点:免费版带宽、连接数有限,长期大批量使用需要付费。

budtmo/docker-android 和掌界云手机 NAS 部署对比

  1. budtmo/docker-android:开源基础镜像,NAS 部署需要手动开启 KVM、设置 VNC 密码,外网穿透、反向代理全部自己调试,踩坑点多,适合深度折腾的技术玩家。
  2. 掌界云手机:Docker 安卓深度封装方案,适配 NAS 环境,内置 Web VNC 鉴权、ADB 权限管控,网络参数预设优化。不用大量调试容器配置,适合多实例挂机,批量部署更省心。

常见故障排查(NAS 部署高频坑)

坑 1:NAS 没有开启 KVM 虚拟化

容器可以启动,但安卓画面卡顿、黑屏、noVNC 连接超时。必须进入 NAS 后台开启硬件虚拟化。

坑 2:noVNC 白屏,能 ping 通端口但页面连不上

noVNC 依赖 Websocket 协议,Nginx 反向代理时必须增加 Websocket 升级配置,否则网页建立连接失败。
Nginx 核心片段:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

坑 3:容器端口映射顺序写反

-p 宿主机端口:容器端口,顺序颠倒会直接无法访问。

坑 4:ADB 外网连接失败

ADB 原生无密码鉴权,禁止直接公网暴露 5555 端口。如果外网需要 ADB 调试,走 FRP 隧道 + IP 白名单限制。

坑 5:NAS 网络隔离、AP 隔离

路由器开启 AP 隔离,手机连 WiFi 无法访问 NAS 内网 Docker 服务,关闭 AP 隔离即可。

安全重点提醒(非常重要)

  1. 网页 VNC 务必设置访问密码,不要空密码访问。
  2. 优先内网穿透,尽量避免路由器直接端口转发把容器暴露公网。
  3. ADB 5555 端口,尽量只在内网使用,减少被恶意接管风险。
  4. 容器环境仅限个人技术研究,不要用于违规场景,遵守各类 APP 用户协议。

总结

NAS 上 Docker 云手机外网访问,优先判断你是否有公网 IP:
✅无公网 IP:首选 FRP 自建隧道,其次 cpolar / 花生壳一键穿透。
✅有公网 IP:可以端口转发,但一定要配置 VNC 密码,不要开放 ADB 公网端口。
如果不想反复调试虚拟化、网络、鉴权等各类问题,可以选择封装好的 Docker 安卓自建方案。