Docker 및 Java 소켓 : 컨테이너간에 데이터 공유

Jan 11 2021

내 서버가 클라이언트에 파일을 보내는 클라이언트-서버 서비스를 코딩하고 있습니다.

다음 예에서는 클라이언트에게 파일 이름 목록을 보내려고했습니다.

섬기는 사람

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 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

클라이언트-서버 연결은 도커 컨테이너를 통해 성공 했지만 두 서비스를 모두 실행할 때 출력이 표시되지 않습니다.

<---Available files--->

나는 며칠 동안 이것에 갇혀 있습니다. 무엇이 잘못 되었을까요? 다른 정보를 제공해야하는 경우 알려주십시오.

도커의 서버 측에서 PS 서버 이미지를 호스트로 설정했습니다.newclientSocket = new Socket("server", 4000)

답변

Ruokki Jan 11 2021 at 16:48

컨테이너에는 호스트 파일 시스템과 다른 자체 파일 시스템이 있습니다. C:\ServerMusicStorage이 파일이 컨테이너에 없기 때문에 컨테이너에서 경로를 사용할 수 없습니다.

당신은에보고해야 바인드 또는 볼륨을

또는 이미지를 만들 때 파일을 복사합니다.

또한 경로는 대부분의 도커 이미지가 Linux 시스템이기 때문에 유닉스 경로 (/ yourdirectory)로 변경해야하는 Windows 경로입니다.

DockerFile에서 COPY 를 사용하려면 다음을 추가하십시오.

COPY ServerMusicStorage/ /ServerMusicStorage 

하지만 내가 착각하지 않았다면 src 파일은 상대 경로 여야합니다 ... 와 관련이 있으므로 빌드 디렉토리 근처에 / ServerMusicStorage를 넣어야합니다.