frp实现内网穿透报错connect to local service [127.0.0.1:8080] error: dial tcp connect: connection refused

项目场景:

通过云服务器和本地使用frp实现内网穿透时,出现connect to local service [127.0.0.1:8080] error: dial tcp 127.0.0.1:8080: connect: connection refused这种问题。内网穿透教程详见小傅哥教程:内网穿透教程


问题描述

在本机和云服务器都通过docker布置好frp服务后,本地启动项目于8080端口,但是通过服务器内网穿透失败,查看本机docker中的frp的运行日志,发现我每请求一次,就输出一次错误:2025-07-06 12:08:09.503 [E] [proxy/proxy.go:206] [a96fa10c615bf04a] [xfg-dev-tech-01] connect to local service [127.0.0.1:8080] error: dial tcp 127.0.0.1:8080: connect: connection refused。


原因分析:

原因是因为docker默认的和本机网络有网络隔离,所以docker找不到127.0.0.1:8080端口,


解决方案:

查询网上各种资料和咨询gpt
默认的方案:在frpc的docker-compose.yml文件夹下添加

network_mode: "host"

完整代码如下

version: '3.9'
services:
  frpc:
    image: fatedier/frpc:v0.60.0
    hostname: frpc
    container_name: frpc
    volumes:
      - "./config/frpc.toml:/frpc.toml"
    command:
      - "-c"
      - "/frpc.toml"
    network_mode: "host"

这行代码表示这表示 frpc 容器使用宿主机网络,frpc 内访问 127.0.0.1:8080 就等价于访问你本地宿主机的 127.0.0.1:8080,理论上应该可以直接连接本地运行的服务,但是我重新部署后还是报一样的错。
接下来的方案,修改frpc.toml文件中的localIP字段为

localIP = "host.docker.internal"

原先代码

serverAddr = "你服务器的公网ip"
# 服务端配置的bindPort
serverPort = 7000
# token =

[[proxies]]
# 代理应用名称,根据自己需要进行配置
name = "xfg-dev-tech-01"
# 代理类型 有tcp\udp\stcp\p2p
type = "tcp"
# 客户端代理应用IP
localIP = "127.0.0.1"
# 客户端代理应用端口
localPort = 8080
# 服务端反向代理端口;提供给外部访问
remotePort = 8080

修改为

serverAddr = "你服务器的公网ip"
# 服务端配置的bindPort
serverPort = 7000
# token =

[[proxies]]
# 代理应用名称,根据自己需要进行配置
name = "xfg-dev-tech-01"
# 代理类型 有tcp\udp\stcp\p2p
type = "tcp"
# 客户端代理应用IP
localIP = "host.docker.internal"
# 客户端代理应用端口
localPort = 8080
# 服务端反向代理端口;提供给外部访问
remotePort = 8080

然后就可以正常内网穿透了
查阅资料
host.docker.internal 是 Docker Desktop 提供的专用桥梁
它是 Docker Desktop 为了解决容器访问宿主机服务的问题,专门提供的一个虚拟主机名,它指向你的宿主机 IP。
举例说明

  • 你在 Windows 上本地跑了一个 Spring Boot 项目监听 8080
  • frpc 容器运行在 Docker 内部,它默认无法访问宿主机的 127.0.0.1:8080
  • 但你写上 localIP = "host.docker.internal" 后,Docker 内部的 frpc 容器就能通过这个地址访问到你宿主机的 8080 端口服务了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值