You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从本地设备访问Google Cloud VM内非localhost的内部服务IP

谷歌云VM内部172.18.0.5:8090服务外部访问解决方案

问题根因

你前两个服务实际监听的是VM所有网卡(你描述的监听localhost大概率是误判,否则不可能通过公网IP直接访问),第三个服务仅绑定了VM内部私有网段地址172.18.0.5,该网段通常是Docker自定义网桥分配的容器内网IP,仅在VM内部网络可达,公网无法直接路由到该地址,因此公网请求无法直接打到该服务上。

解决方案(按适用场景优先级排序)

方案1:修改服务监听配置(永久生效,优先推荐)

  • 找到对应服务的配置文件,将监听地址从172.18.0.5修改为0.0.0.0
  • 重启服务后,即可直接通过VM公网IP:8090访问

方案2:iptables端口转发(无需修改服务配置,永久生效)

SSH登录到VM实例后依次执行以下命令:

  1. 开启内核IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward

要永久开启的话修改/etc/sysctl.conf文件,添加net.ipv4.ip_forward = 1,执行sysctl -p生效
2. 添加端口转发规则

iptables -t nat -A PREROUTING -p tcp --dport 8090 -j DNAT --to-destination 172.18.0.5:8090
iptables -A FORWARD -p tcp -d 172.18.0.5 --dport 8090 -j ACCEPT
  1. 保存iptables规则避免重启失效,Debian/Ubuntu可执行:
iptables-save > /etc/iptables/rules.v4

配置完成后即可通过公网IP:8090访问服务

方案3:SSH本地端口转发(临时调试用,无需修改VM配置)

在你本地设备的终端执行以下命令:

ssh -L 8090:172.18.0.5:8090 <VM登录用户名>@<VM公网IP>

保持该SSH会话不关闭,直接在本地浏览器访问localhost:8090即可访问到目标服务

方案4:Docker容器端口映射(仅适用于服务跑在Docker容器内的场景)

如果172.18.0.5是Docker容器的IP,重新启动容器时添加端口映射参数即可:

docker run -d -p 0.0.0.0:8090:8090 <原有容器启动参数>

重启容器后直接访问公网IP:8090即可


内容的提问来源于stack exchange,提问作者devosc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:45:02