Docker dan soket java: Berbagi data antar kontainer
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
Penampung memiliki sistem file sendiri yang berbeda dari sistem file host. Jalur Anda C:\ServerMusicStorage
tidak 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