Spring boot inside docker container throws java.net.ConnectException: Connection refused (连接被拒绝)

Spring boot inside docker container throws java.net.ConnectException: Connection refused (Connection refused)

客户端 应用程序将 json 数据发送到 localhost:8080 上的服务器并打包 运行 作为 docker 图像。使用 Postman chrome 应用程序手动发送 json 时服务器工作正常。问题是 dockerized client 在尝试使用 OutputStreamWriterjson 写入 HttpURLConnection 时抛出 java.net.ConnectException: Connection refused (Connection refused)。如何让它发挥作用?

Docker 文件:

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"]

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

您必须将客户端配置为使用其主机名连接到服务器。如果您正在使用 docker-compose,则只需服务器的容器名称;如果您 运行 手动启动容器,则只需 docker 主机的主机名。

参考:Networking with standalone containers.

两个客户端应该 运行 在同一个网络上。 所以创建网桥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