Docker dan soket java: Berbagi data antar kontainer

Jan 11 2021

Saya mengkodekan layanan klien-server di mana server saya mengirim file ke klien.

Dalam contoh berikut, saya mencoba mengirim daftar nama file ke klien saya.

Server

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();

Klien

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++;
}

Jadi ketika saya menjalankan program saya di java NetBeans IDE berfungsi seperti yang saya inginkan. Saya mendapatkan file

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

Untuk koneksi buruh pelabuhan saya membuat jaringan dengan

docker network create client_server_network

Saya menjalankan server dengan

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

dan klien dengan

docker run --network client_server_network -it clientimage

Meskipun koneksi klien-server berhasil melalui kontainer buruh pelabuhan, ketika saya menjalankan kedua layanan saya tidak mendapatkan keluaran apa pun.

<---Available files--->

Saya terjebak dalam hal ini selama berhari-hari. Apa mungkin salah? Jika saya harus memberikan informasi lain, beri tahu saya.

PS di sisi server buruh pelabuhan saya mengatur image server sebagai tuan rumahnewclientSocket = new Socket("server", 4000)

Jawaban

Ruokki Jan 11 2021 at 16:48

Penampung memiliki sistem file sendiri yang berbeda dari sistem file host. Jalur Anda C:\ServerMusicStoragetidak dapat berfungsi di penampung Anda karena file ini tidak ada di penampung Anda.

Anda harus melihat ke bind atau volume

Atau menyalin file saat membuat gambar Anda.

Juga jalur Anda adalah jalur windows Anda harus mengubahnya menjadi jalur unix (/ direktori Anda) karena sebagian besar gambar buruh pelabuhan adalah sistem linux

Jika Anda ingin menggunakan COPY di DockerFile Anda, tambahkan saja

COPY ServerMusicStorage/ /ServerMusicStorage 

Tetapi jika saya tidak salah, file src harus menjadi jalur relatif ... terkait dengan Jadi Anda harus meletakkan / ServerMusicStorage di dekat direktori build Anda