gpt4 book ai didi

java - java 套接字上的 Docker : java.net.ConnectException: Connection refused (Connection refused)

转载 作者:行者123 更新时间:2023-12-03 11:50:13 27 4
gpt4 key购买 nike

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

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

FROM java:8
COPY Server.java /
RUN javac Server.java
EXPOSE 25000
ENTRYPOINT ["java"]
CMD ["Server"]

客户端的 dockerfile(在名为“Client”的文件夹中)是:

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

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

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

客户端.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);
}
}
}

服务器.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 解析。容器可以通过名称或别名相互解析。 ( Docker bridge networks )

在客户端,您明确定义了服务器的 IP 地址:Socket serverSocker = new Socket("192.168.2.5", 25000);

Docker 不知道,而是使用容器的名称或别名:Socket serverSocker = new Socket("server", 25000);

或者您可以通过环境变量动态传递服务器主机:Socket serverSocket = new Socket(System.getenv("SERVER_HOST_ENV"), 25000);

不要忘记传递一个环境变量:docker run --env SERVER_HOST_ENV=server --network-alias server --network client_server_network -it server

关于java - java 套接字上的 Docker : java.net.ConnectException: Connection refused (Connection refused),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65629715/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com