Kong网关无法转发请求至本地Docker容器:502错误排查求助
问题解决:Kong网关无法访问本地Docker容器
核心原因
你的Kong容器配置的上游服务地址是http://127.0.0.1:4002,但Docker容器的网络是隔离的——这个127.0.0.1指向的是Kong容器自身的回环接口,而非你的宿主机,所以Kong无法连接到你的Express应用容器。
解决方案(三种可选)
方案1:使用宿主机局域网IP
找到你的宿主机在局域网内的IP地址(比如192.168.1.100),修改Kong的服务配置:
curl -X PATCH http://localhost:8001/services/test_service --data url='http://192.168.1.100:4002'
方案2:Docker Desktop专属域名(Windows/Mac)
如果你用的是Docker Desktop,可以用官方提供的host.docker.internal域名直接指向宿主机:
curl -X PATCH http://localhost:8001/services/test_service --data url='http://host.docker.internal:4002'
方案3:同Docker网络通信(推荐)
把Express容器和Kong加入同一个自定义Docker网络,通过容器名直接访问:
- 创建自定义网络:
docker network create kong-net
- 重新启动Express容器并加入该网络:
docker run --name test-service --network kong-net -p 4002:4002 mikyll/test-service:latest
- 修改Kong服务配置,用容器名作为地址:
curl -X PATCH http://localhost:8001/services/test_service --data url='http://test-service:4002'
验证
修改完成后,重新发送请求测试:
curl -X GET http://localhost:8000/test
此时应该能收到Test unknown path的正常响应。
额外说明
你的路由配置(paths[]=/test、strip_path=true)是正确的,请求/test会被Kong转发到上游服务的根路径,符合你的Express应用逻辑。
内容的提问来源于stack exchange,提问作者mikyll98
相关产品推荐
相关产品推荐

