我有两个应用程序,一个 Spring Boot 在我的 Windows 本地主机上运行,端口:8080,另一个 Spring Boot docker 容器,在本地主机:9000 运行 - 是的,我可以在该端口的 postam 中访问它,它们两个。 问题是,我在 Spring Boot docker 容器中调用了位于 Windows 计算机上的 Spring Boot 服务,当我调用该端点时,我收到此错误:
failed: Connection refused: localhost/127.0.0.1:8080] with root cause
java.net.ConnectException: finishConnect(..) failed: Connection refused
我的问题是,如何更改我的 Spring Boot docker 容器 app.yaml 以便能够调用位于 Windows 计算机上的端点?
我在Windows 10上运行docker桌面,我使用了--net=host但不起作用,我不知道我使用host.docker.internal/8080是否会成功..
Postman 工作的原因很简单:当您运行 docker 容器时,端口转发会完成到容器内应用程序的本地主机上的端口。问题的原因是Docker容器本身有一个独立的环境和自己的操作系统。如果您从 Docker 容器中的应用程序向 localhost:9000 发出请求,它不会向 Windows 上的 localhost:9000 发送请求,而是向容器中运行的 linux 的 localhost 发送请求。并且它无法从Linux找到所需的正在运行的应用程序,因为所需的应用程序正在Windows的本地主机上运行。 docker 容器中的本地主机是 linux 本地主机,而不是 windows。在这种情况下,您不应该写 localhost:9000,例如 192.168.1.100:9000,如果防火墙和网络没有问题,一切都会正常。注意 192.168.1.100:9000 在您的计算机上可能有所不同。在 Windows 中,您可以通过在 cmd 中键入 ipconfig 来查找您的 IP 地址。以下评论的提示(图片网址):