java套接字上的Docker:java.net.ConnectException:拒绝连接(拒绝连接)

java套接字上的Docker:java.net.ConnectException:拒绝连接(拒绝连接),java,docker,sockets,networking,Java,Docker,Sockets,Networking,我有两个java文件Server.java和Client.java。两者都在不同的容器中 DOCKER文件:我用于服务器的DOCKER文件(位于名为“服务器”的文件夹中)是: FROM java:8 COPY Server.java / RUN javac Server.java EXPOSE 25000 ENTRYPOINT ["java"] CMD ["Server"] 客户端的dockerfile(位于名为“客户端”的文件夹中)为: FROM ja

我有两个java文件Server.java和Client.java。两者都在不同的容器中

DOCKER文件:我用于服务器的DOCKER文件(位于名为“服务器”的文件夹中)是:

FROM java:8
COPY Server.java /
RUN javac Server.java
EXPOSE 25000
ENTRYPOINT ["java"]
CMD ["Server"]
客户端的dockerfile(位于名为“客户端”的文件夹中)为:

FROM java:8
COPY Client.java /
RUN javac Client.java
EXPOSE 25000
ENTRYPOINT ["java"]
CMD ["Client"]
构建我使用的参与者

docker build . (for the client Dockerfile)

docker build . (for the server Dockerfile)
docker network create client_server_network

docker run --network-alias server --network client_server_network -it serverimage

docker run --network client_server_network -it clientimage

对于我使用的网络设置

docker build . (for the client Dockerfile)

docker build . (for the server Dockerfile)
docker network create client_server_network

docker run --network-alias server --network client_server_network -it serverimage

docker run --network client_server_network -it clientimage

我运行客户端映像时遇到的错误是

java.net.ConnectException: Connection refused (Connection refused)
Client.java

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("192.168.2.5", 25000);
            DataOutputStream dout = new DataOutputStream(s.getOutputStream());
            dout.writeUTF("Hello Server");
            dout.flush();
            dout.close();
            s.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
Server.java

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(25000);
            Socket s = ss.accept();// establishes connection
            DataInputStream dis = new DataInputStream(s.getInputStream());
            String str = (String) dis.readUTF();
            System.out.println("message= " + str);
            ss.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

我做错了什么?

默认情况下,docker在容器之间使用自动DNS解析。容器可以通过名称或别名相互解析。()

在客户端,您明确定义了服务器的IP地址:
socketserversocker=新套接字(“192.168.2.5”,25000)

Docker不知道,而是使用容器的名称或别名:
socketserversocker=新套接字(“服务器”,25000)

或者,您可以通过环境变量动态传递服务器的主机:
socketserversocket=newsocket(System.getenv(“SERVER\u HOST\u ENV”),25000)

不要忘记传递环境变量:
docker-run--env-SERVER\u-HOST\u-env=SERVER--network alias-SERVER--network client\u-SERVER\u network-it-SERVER

非常感谢