从容器内部访问服务主机



我有一个Spring Boot配置服务器在本地主机的8888端口上运行。我想从码头集装箱内访问此服务。我不能把这个服务放在同一个docker组和同一个网络中。

服务:http://localhost:8888/cpo-executor/dev
使用我的ip:http://192.168.0.6:8888/cpo-executor/dev

我已经在浏览器上检查了这个地址,它正在工作。当我试图从docker容器内部访问时,我遇到了一个错误:

docker exec -it 7febe846f2ea /bin/bash
curl http://192.168.0.6:8888/cpo-executor/dev

错误:

curl: (7) Failed to connect to 192.168.0.6 port 8888: Connection timed out

我试着开始把我的容器放入";network_mode:host";在docker compose中,但我最终陷入了另一个错误,因为一个容器无法与另一个容器通信。

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Caused by: java.net.UnknownHostException: mysql

如何从docker容器内的主机访问服务?

解决方案取决于Docker引擎运行的平台。

  1. 在Windows上,容器可以连接到具有特殊主机名host.docker.internal的主机(请参阅Docker文档(。相比之下,host网络模式在Windows上不起作用(请参阅Docker文档(。

  2. 在Linux上,您应该使用host网络模式。但是,这将破坏容器之间的连接方式。在默认的bridge网络模式中,它们可以通过使用与服务名称相同的主机名(在您的情况下为mysql(相互连接。但是,对于Host网络模式,您应该使用localhost主机名,因为所有容器共享同一主机的网络。

最新更新