同一局域网下,如何用手机浏览器访问电脑 Docker 容器中的 Web 服务?

在本地开发、测试或折腾私有服务时,我们经常会在电脑的 Docker 中运行各种 Web 应用(例如 Web 管理面板、API 接口、基于 noVNC 的可视化桌面等)。

很多时候,我们希望直接用身边的手机浏览器来调试或查看这些页面。本文将详细讲解访问逻辑、操作步骤以及如何避开防火墙和代理(VPN)的常见坑。


目录


一、核心工作原理与端口映射

手机访问电脑 Docker 的核心在于 端口映射(Port Mapping)

  1. 容器与宿主机: 容器有独立的内部网络。启动容器时,通过 -p 宿主机端口:容器端口 把服务暴露给电脑。
  2. 监听范围: Docker 默认会将端口绑定在 0.0.0.0,这意味着局域网内的其他设备也可以通过电脑的局域网 IP 访问该端口

端口作用示例:

如果容器映射了以下 3 个端口:

  • 5900:5900:原生 VNC 远程桌面端口
  • 6080:6080:基于网页的 noVNC 远程桌面端口
  • 6657:6657:项目的主网页服务 / API 端口

则访问规则为:

  • 电脑本机访问: http://localhost:6657/
  • 手机局域网访问: http://<电脑局域网IP>:6657/(例如 http://192.168.1.100:6657/
  • 手机看图形桌面: http://<电脑局域网IP>:6080/

二、第一步:获取电脑的局域网 IP

Windows 系统

  1. 按键盘快捷键 Win + R,输入 cmd 并回车。
  2. 在命令行中输入:ipconfig
  3. 找到你当前联网的网卡(如“无线局域网适配器 WLAN”或“以太网”),记录下 IPv4 地址(通常形如 192.168.1.X192.168.31.X)。

macOS / Linux 系统

打开终端执行:

1
2
3
ifconfig | grep "inet "
# 或
ip a

找到对应的内网 IP(如 192.168.x.x)。


三、第二步:放行电脑防火墙端口

Windows 防火墙默认会拦截来自局域网外部设备的访问请求。如果不放行对应端口,手机访问时会一直提示“连接超时”。

推荐方法:PowerShell 单行命令放行

管理员身份打开 PowerShell,复制并执行以下命令(以放行 66576080 端口为例):

1
2
3
4
5
# 放行 6657 网页服务端口
New-NetFirewallRule -DisplayName "Allow Docker 6657" -Direction Inbound -LocalPort 6657 -Protocol TCP -Action Allow

# 放行 6080 Web桌面端口
New-NetFirewallRule -DisplayName "Allow Docker 6080" -Direction Inbound -LocalPort 6080 -Protocol TCP -Action Allow

⚠️ 注意: 命令请整行复制执行,不要拆分成多行,避免因断行引发 -Direction: The term '-Direction' is not recognized 报错。

检查网络配置类型(Windows):

确保当前 Wi-Fi 网络配置为 “专用网络(Private Network)”。如果是“公用网络”,Windows 防火墙会启用极其严格的入站拦截策略。


四、第三步:手机浏览器访问与验证

  1. 连接同一 Wi-Fi: 确保手机连接的无线网络和电脑处于同一个路由器下(避免连接访客 Wi-Fi)。
  2. 打开手机浏览器: 在地址栏输入电脑的 IP 和端口:http://192.168.1.100:6657/(请将 192.168.1.100 替换为你电脑的实际 IP)
  3. 如果项目包含网页版图形桌面(noVNC),可访问:http://192.168.1.100:6080/

五、避坑指南:开启代理(梯子/VPN)导致打不开怎么办?

很多开发者在日常使用中会开启代理软件(如 Clash、v2rayN、Shadowrocket 等),此时极易遇到以下网络问题:

1. 访问时是填代理 IP 吗?

不是!依然填电脑的局域网 IP(192.168.x.x)。
代理节点是公网上的远端服务器,远端服务器无法识别也无法直接路由到你家里的局域网设备。

2. 手机开启代理后网页打不开

如果手机开启了“全局代理”或 VPN 虚拟网卡(TUN 模式),手机会将 192.168.x.x 的请求错误地转发给境外代理服务器,从而导致“连接超时”或“找不到服务器”。

  • 解决方案: 在手机上临时关闭代理后再刷新网页;或者在手机代理软件中开启 “绕过局域网 (Bypass LAN)” / 切换至 “规则分流模式 (Rule)”

3. 电脑开启了 TUN / 全局路由模式

若电脑代理软件开启了深度的 TUN 虚拟网卡接管,可能会屏蔽局域网入站连接。如果手机连接不上,可尝试临时关闭电脑端的 TUN 模式排查。


六、常见问题排查(FAQ)

问题现象 可能原因 解决办法
手机提示“连接超时 / 无法访问” 1. 电脑防火墙拦截
2. 手机开了全局代理
3. 手机与电脑不在同一 Wi-Fi
1. 以管理员身份执行第二步的防火墙命令。
2. 关闭手机代理。
3. 确认手机和电脑连接的是同一路由器的非访客网络。
电脑本机能打开,局域网都打不开 Docker 端口仅绑定了本地回环 检查启动参数,避免配置为 -p 127.0.0.1:6657:6657,应使用默认的 -p 6657:6657(绑定至 0.0.0.0)。
不在家(在外使用 4G/5G 流量)想要访问 超出局域网范围 需配合内网穿透(如 FRP、Cloudflare Tunnel)或组网虚拟局域网工具(如 Tailscale、ZeroTier)。

七、总结

实现局域网移动端访问的核心步骤非常简单:

  1. 确认容器启动参数包含 -p(端口映射)。
  2. 查 IP: 电脑执行 ipconfig 获取局域网 IPv4。
  3. 开防火墙: 使用 New-NetFirewallRule 单行命令放行端口。
  4. 连 Wi-Fi 访问: 手机连入同 Wi-Fi,关代理后输入 http://192.168.x.x:端口/ 即可。