docker容器内的spring boot引发java.net.ConnectException:连接被拒绝(连接被拒绝)

时间:2018-08-27 19:59:45

标签: java docker spring-boot kitematic

客户端应用程序将json数据发送到已打包并作为docker映像运行的localhost:8080上的服务器。使用Postman Chrome应用手动发送json时,服务器工作正常。问题出在使用java.net.ConnectException: Connection refused (Connection refused)json写到HttpURLConnection时,被docker化的 client 抛出OutputStreamWriter。如何运作?

Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/client-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8088
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

2 个答案:

答案 0 :(得分:0)

在Docker中,每个容器都有其自己的虚拟化网络堆栈- localhost 是容器的环回接口的地址,而不是主机的环回接口的地址。

您必须配置客户端以使用其主机名连接到服务器。如果您使用的是docker-compose,则只需使用服务器的容器名称;如果您手动运行这些容器,则只需使用Docker主机的主机名。

参考:Networking with standalone containers

答案 1 :(得分:0)

两个客户端都应在同一网络上运行。 因此,创建一个网桥MY_BRIDGE

docker network create MY_BRIDGE

运行它们时,将两个容器都连接到桥。为服务器容器命名MY_SERVER

docker run --network MY_BRIDGE --name MY_SERVER MY_SERVER_IMAGE

docker run --network MY_BRIDGE MY_CLIENT_IMAGE

在运行客户端容器之前,您的应用程序代码必须从localhost:8080更改为MY_SERVER:8080

请参见Docker Bridge Documentation