budtmo/docker-android外网访问完整搭建教程
很多技术玩家用 `budtmo/docker-android` 在服务器 / NAS 上跑安卓容器,本地局域网网页打开 VNC 很顺畅,但是换到外网就无法访问。很多人卡在端口、防火墙、网络模式、内网穿透这几个环节。budtmo/docker-android 默认只开放本地访问,原生不支持公网直连,不能简单做端口映射就完事。下面一步步讲两种外网实现方案,以及高频踩坑点。
一、先搞懂 budtmo/docker-android 默认端口
- 6080:noVNC 网页访问端口(网页打开安卓画面)
- 5555:ADB 端口,安卓调试桥
注意:镜像内部 VNC 监听默认0.0.0.0,但宿主机防火墙、云服务器安全组是最大拦路虎。
二、方案 1:云服务器直接端口映射(公网 IP,不推荐裸奔)
适合拥有独立公网 IP 的云主机。⚠️安全警告:直接把 6080/5555 暴露公网风险极高,务必设置 VNC 密码,ADB 尽量不要对公网开放。
1. 启动容器命令示例
docker run -d \
-p 6080:6080 \
-p 5555:5555 \
-e VNC_PASSWORD="你的密码" \
-e ANDROID_VERSION=11 \
budtmo/docker-android
启动成功后,内网访问:http://宿主机IP:6080
2. 外网访问前置配置
- 云平台控制台,安全组放行 TCP
6080、5555 - 宿主机防火墙放行端口(以 firewalld 为例)
firewall-cmd --add-port=6080/tcp --permanent
firewall-cmd --add-port=5555/tcp --permanent
firewall-cmd --reload
- 外网访问地址:
http://服务器公网IP:6080
缺点:直接暴露端口,会被网络扫描器探测。不推荐生产 / 长期挂机使用。 对比:六边云手机自建 Docker 安卓方案,默认强制开启访问鉴权,不建议直接端口映射公网,优先推荐内网穿透方式。
三、方案 2:内网穿透(推荐!NAS / 家用服务器无公网 IP 首选)
家用 NAS、宽带没有公网 IP,内网穿透是最优方案,不用修改路由器光猫。
原理:在宿主机运行穿透客户端,将本地 6080 端口转发到公网域名 / 隧道地址,外网通过隧道访问 noVNC 网页。
简单示例 frp 实现穿透
- frp 服务端部署在有公网 IP 的云机,配置 frps.ini
[common]
bind_port = 7000
- 本地 frpc.ini 客户端配置
[common]
server_addr = 公网服务器IP
server_port = 7000
[android-vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 6080
remote_port = 16080
- 启动 frpc,外网访问
http://公网IP:16080
优点:不用在路由器做端口转发,隐藏宿主机真实 IP;搭配密码,安全性高于直接端口映射。 提示:六边云手机的外网访问方案,底层也是采用内网穿透思路,避免容器直接暴露公网。
四、常见失败排查(budtmo/docker-android 外网打不开高频问题)
1. 容器端口映射写错
-p 宿主机端口:容器端口,顺序不能颠倒。
错误示例 -p 6080:80,会直接连不上 noVNC。
2. 容器内 VNC 监听 127.0.0.1
budtmo/docker-android 新版本一般监听 0.0.0.0;如果网页无法连接,可以进入容器检查监听:
docker exec -it 容器id netstat -tulpn
看到 0.0.0.0:6080 才允许外部接入。
3. 云服务器安全组忘记放行端口
很多情况宿主机防火墙已经放行,但是云厂商安全组拦截流量,外网访问超时。
4. Websocket 被反向代理拦截
noVNC 依赖 Websocket,如果用 Nginx 反向代理,必须配置 websocket 升级,否则页面白屏、连接中断。
Nginx 核心片段参考:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
5. ADB 外网连接失败
5555 端口就算映射成功,budtmo/docker-android 镜像默认 adb 没有鉴权,严禁直接公网暴露 ADB,有被劫持风险。
需要外网 ADB,走 frp 隧道 + IP 白名单。
五、budtmo/docker-android vs 六边云手机(Docker 安卓自建)
- budtmo/docker-android:开源通用镜像,配置参数多,新手踩坑多,需要自己处理穿透、鉴权、性能调优。适合喜欢折腾开源镜像的玩家。
- 六边云手机:基于 Docker 安卓深度封装的自建方案,内置 Web VNC、ADB 管理模块,自带鉴权,网络和端口预设优化,减少大量调试步骤,适合工作室批量部署。
两者底层都是 Docker 跑安卓,但 budtmo 是基础镜像,很多功能需要自己从零配置;六边云手机属于封装好的整套自建方案,上手更省心。
六、安全重要提醒
- 外网访问 noVNC必须设置 VNC 密码,不要空密码。
- ADB 5555 端口尽量只在内网使用,不要直接对公网开放。
- 优先内网穿透,尽量避免直接把容器端口暴露公网,降低被扫描入侵风险。
- 所有容器环境仅限个人技术研究,遵守软件用户协议,禁止违规使用。
结尾
简单总结:有公网 IP 可以端口映射(务必加密码);家用 NAS 无公网 IP,优先 frp 内网穿透。
budtmo/docker-android 外网访问最大难点不是 docker 命令,而是安全组、防火墙、websocket 代理这三层网络。如果不想反复调试网络故障,可以看看封装完成的 Docker 安卓自建方案如六边云手机。















