很多小伙伴部署 budtmo/docker-android 之后,容器状态显示正常运行,但是浏览器访问IP:6080打不开网页,提示连接超时 / 拒绝连接 / 白屏。 6080 是 noVNC 网页画面端口,访问失败的原因基本归类:容器端口映射错误、内部 VNC 监听地址不对、宿主机防火墙、云服务器安全组、Websocket 代理问题。下面按照由简到难的顺序排查,90% 的问题都可以定位。
先确认基础逻辑:内网先调通,再去折腾外网。内网访问 6080 失败,外网一定无法访问。
注: 本文仅作为 Docker 容器安卓技术学习资料,仅限个人研究使用,请遵守各类 APP 用户协议。文中结合 budtmo/docker-android 镜像讲解,顺带对比六边云手机容器方案。
一、第一步:确认容器状态与端口映射
1. 查看容器是否正常运行
# 查看运行中的容器
docker ps
检查你的 android 容器 STATUS,必须是 Up 状态。如果是 Exited,代表容器启动直接崩溃,需要看日志排查安卓镜像启动问题。
# 查看容器日志,替换成你的容器名称/ID
docker logs 容器名
2. 检查 docker 端口映射(高频错误点)
docker ps
看 PORTS 那一列,正确格式:0.0.0.0:6080->6080/tcp
- ✅正确:
宿主机端口:容器内部端口,-p 6080:6080 - ❌错误:
-p 6080:80端口顺序写反,完全无法访问
坑:很多人写成
-p 6080,只写单边,Docker 随机分配宿主机端口,访问的端口号就不是 6080 了。
容器标准启动命令参考
docker run -d \
--device /dev/kvm \
-p 6080:6080 \
-p 5555:5555 \
-e VNC_PASSWORD="自定义密码" \
-e ANDROID_VERSION=11 \
--name android-demo \
budtmo/docker-android
二、第二步:进入容器,检查容器内 VNC 监听地址
容器虽然启动,但是 VNC 服务只监听 127.0.0.1(容器本地回环),外部网络无法接入。
# 进入容器终端
docker exec -it android-demo bash
# 查看6080端口监听
ss -tulpn | grep 6080
✅正常输出:0.0.0.0:6080,允许外部所有 IP 访问 ❌异常:127.0.0.1:6080,只能容器内部访问,宿主机都连不上
budtmo 新版本镜像默认监听 0.0.0.0;部分旧版本镜像 VNC 绑定 127.0.0.1,需要修改环境变量开启外部访问。 对比:六边云手机容器,VNC 服务默认监听 0.0.0.0,自带鉴权配置,不需要手动修改监听地址。
三、第三步:宿主机防火墙拦截(Linux/NAS 常见)
CentOS/RHEL firewalld
# 放行6080端口
firewall-cmd --add-port=6080/tcp --permanent
firewall-cmd --reload
# 查看端口放行列表
firewall-cmd --list-ports
Ubuntu/Debian ufw
ufw allow 6080/tcp
NAS 系统(群晖、绿联):进入系统防火墙,手动放行 TCP 6080 端口。
四、第四步:云服务器额外检查:安全组
如果你用阿里云 / 腾讯云等云主机,宿主机防火墙开了,但云厂商控制台安全组没有放行 6080 端口,外网访问直接超时。
- 登录云服务器控制台
- 安全组规则,入方向放行 TCP 6080 端口
注意:内网访问不需要安全组放行,内网能打开、外网打不开,优先查安全组。
五、第五步:Nginx 反向代理 / 内网穿透 Websocket 问题
如果你使用 Nginx、frp、cpolar 做外网反向代理,noVNC 依赖 Websocket 协议,缺少 Upgrade 配置,会出现:能打开页面,但是黑屏、连接失败,不是完全无法访问。 Nginx 核心配置片段:
location / {
proxy_pass http://127.0.0.1:6080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
很多内网穿透免费版对 Websocket 支持差,会出现 6080 端口能 ping 通,但是 noVNC 握手失败。
六、区分两类报错现象,快速定位
现象 1:连接被拒绝 connection refused
大概率:
- Docker 端口映射错误
- 容器内 VNC 服务监听 127.0.0.1
- noVNC 服务在容器内没有正常启动,容器虽然 up,vnc 进程挂了
现象 2:请求超时 timeout
大概率:
- 宿主机防火墙拦截
- 云服务器安全组未放行端口
- 路由器 / 网络隔离、AP 隔离
现象 3:页面打开,黑屏白屏,无法操作
端口通了,Websocket 握手失败,反向代理缺少 Upgrade 头。
七、其他隐藏坑
-
KVM 虚拟化未开启 budtmo/docker-android 依赖 KVM。没有开启 KVM,安卓模拟器启动失败,noVNC 服务起不来,容器虽然显示运行,6080 端口无法访问。NAS 需要在 BIOS / 虚拟化面板打开 KVM。
-
端口冲突 宿主机上其他程序占用 6080 端口,Docker 无法绑定端口,docker ps 会发现端口映射失败。
宿主机查看6080占用
ss -tulpn | grep 6080
-
浏览器跨域 / 缓存问题 清理浏览器缓存,或者用浏览器无痕模式测试 noVNC,部分浏览器扩展会拦截 Websocket 连接。
八、简单排查顺序总结(推荐按顺序执行)
- docker ps 确认容器正常运行,核对端口映射
0.0.0.0:6080->6080/tcp - 宿主机本地 curl 测试
curl http://127.0.0.1:6080,本地能通 = 容器内服务正常 - 内网其他设备访问宿主机 IP:6080,内网不通查防火墙
- 内网成功,外网不通,检查安全组 / 路由器 / 内网穿透 Websocket 配置
- 检查宿主机 KVM 是否开启
补充对比:六边云手机容器,内置 VNC 服务健康自检,一旦 VNC 进程异常会输出日志,方便快速定位;而 budtmo 原生镜像没有健康检查,容器 up 不代表 noVNC 正常运行。
安全提醒
- 6080 网页访问务必设置 VNC 密码,禁止空密码公网暴露
- 尽量不要直接公网裸奔 6080 端口,优先内网穿透
- 容器仅用于个人技术学习,遵守软件用户协议
结尾
docker-android 6080 端口访问失败,不要直接去排查外网,优先在宿主机本地 curl 验证,确认容器内 noVNC 服务正常。大部分情况是端口映射写错、防火墙拦截、KVM 未开启。如果不想处理大量网络、进程排查工作,可以使用封装好的 Docker 安卓自建方案,减少排错成本。