Docker 和 java 套接字:在容器之间共享数据

Docker and java sockets: Share data between containers

我正在编写客户端-服务器服务,我的服务器在其中向客户端发送文件。

在下面的示例中,我尝试向我的客户端发送文件名列表。

服务器

serverSocket = new ServerSocket(4000);
connsock = serverSocket.accept();
objectOutput = new ObjectOutputStream(connsock.getOutputStream());

List<String> file_names = new ArrayList<String>();
File[] files = new File("C:\ServerMusicStorage").listFiles();

for (File file : files) {
    if (file.isFile()) {
        file_names.add(file.getName());
    }
}
objectOutput.writeObject(file_names);
objectOutput.flush();

客户端

newclientSocket = new Socket("localhost", 4000);
objectInput1 = new ObjectInputStream(newclientSocket.getInputStream());

System.out.println("<---Available files--->");

// get list of files from server
Object file_names = objectInput1.readObject();
file_list = (ArrayList<String>) file_names;
int count = 1;

for (int i = 0; i < file_list.size(); i++) {
    System.out.println(count + ")" + file_list.get(i));
    count++;
}

因此,当我 运行 我的程序在 java NetBeans IDE 时,它可以正常工作。我得到文件

<---Available files--->
1)blank.wav
2)fuark.wav

对于 docker 连接,我创建了一个网络

docker network create client_server_network

我运行服务器用

docker run --env SERVER_HOST_ENV=server --network-alias server --network client_server_network -it server

和客户

docker run --network client_server_network -it clientimage

尽管 客户端-服务器连接成功 通过 docker 容器,当我 运行 这两个服务时我没有得到任何输出。

<---Available files--->

我被困在这个问题上好几天了。可能出了什么问题?如果我需要提供任何其他信息,请告诉我。

P.S。在 docker 的服务器端,我将 server 图像设置为主机 newclientSocket = new Socket("server", 4000)

容器有自己的文件系统,不同于主机文件系统。 您的路径 C:\ServerMusicStorage 无法在您的容器中工作,因为此文件不在您的容器中。

你应该看看bind or volume

或者在创建图像时复制文件。

此外,您的路径是 windows 路径,您应该将其更改为 unix 路径 (/yourdirectory),因为大多数 docker 图像都是 linux 系统

如果您想在 DockerFile 中使用 COPY,只需添加

COPY ServerMusicStorage/ /ServerMusicStorage 

但是如果我没记错的话src文件应该是相对路径... 所以你必须把 /ServerMusicStorage 放在你的构建目录附近