首页 > 解决方案 > 无法在 Java 中使用 HttpURLConnection 连接 Docker 容器

问题描述

我在 java 中创建了两个 Web 项目。其中一个项目在 Tomcat docker 容器中运行:

192.160.1.5:8080/SocketServer

另一个项目正在使用 eclipse 在本地机器上运行

localhost:8081/SocketClient

我正在尝试使用 java 中的 HttpURLConnection 从 SocketClient 连接在 docker 容器内运行的 SocketServer 项目。但它给出了一些错误,如下所示:

java.net.ConnectException: Connection refused
    at java.base/sun.nio.ch.Net.connect0(Native Method)
    at java.base/sun.nio.ch.Net.connect(Net.java:574)
    at java.base/sun.nio.ch.Net.connect(Net.java:563)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
    at java.base/java.net.Socket.connect(Socket.java:648)
    at java.base/java.net.Socket.connect(Socket.java:597)
    at java.base/java.net.Socket.<init>(Socket.java:520)
    at java.base/java.net.Socket.<init>(Socket.java:370)
    at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80)
    at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:122)
    at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
    at com.dump.LogAction.startSocket(LogAction.java:61)
    at com.dump.LogAction.execute(LogAction.java:37)

我该如何解决这个问题?

标签: javadockerhttpurlconnection

解决方案


这是正常行为,您应该阅读文档。 https://docs.docker.com/network/network-tutorial-host/

--network host快速回答:使用参数运行 docker 映像,或者您需要公开一个端口https://www.whitesourcesoftware.com/free-developer-tools/blog/docker-expose-port/ --expose 8080


推荐阅读