java - Docker和Java套接字: Share data between containers

标签 java docker sockets stream

我正在编码一个客户端-服务器服务,其中我的服务器正在向客户端发送文件。
在以下示例中,我尝试将文件名列表发送给客户端。
服务器

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的服务器端,我将服务器镜像设置为主机newclientSocket = new Socket("server", 4000)

最佳答案

容器有自己的文件系统,与主机文件系统不同。
您的路径C:\ServerMusicStorage在您的容器中无法使用,因为此文件不在您的容器中。
您应该看看bindvolume
或在创建图像时复制文件。
另外,您的路径是Windows路径,您应该将其更改为Unix路径(/您的目录),因为大多数Docker镜像都是Linux系统
如果要在DockerFile中使用COPY,只需添加

COPY ServerMusicStorage/ /ServerMusicStorage 
但是,如果我没记错的话,src文件应该是一个相对路径... related to
因此,您必须将/ServerMusicStorage放在您的构建目录附近

关于java - Docker和Java套接字: Share data between containers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65663601/

相关文章:

java - 如何将脚本引擎(Jython)实现到 Java 中?

java - 使用 Spring Boot 的角色层次结构和 OAuth2 安全性

docker - 在CircleCi中的不同作业之间共享步骤的结果

c++ - 使用 C 进行套接字编程时无法接收或发送整个数据包

c++ - 处理 Windows 套接字错误

java - 使文件传输更高效 Java

java - NetBeans JButton 中的 JFreeChart 拨号

java - Java中如何从父类(super class)访问子类?

docker build 说空间不足,但空间充足

docker - 来自 docker 容器的 "Operation not permitted"以 root 身份登录