客户端应用程序将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"]
答案 0 :(得分:0)
在Docker中,每个容器都有其自己的虚拟化网络堆栈- localhost 是容器的环回接口的地址,而不是主机的环回接口的地址。
您必须配置客户端以使用其主机名连接到服务器。如果您使用的是docker-compose
,则只需使用服务器的容器名称;如果您手动运行这些容器,则只需使用Docker主机的主机名。
答案 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
。