Docker e socket java: condividi i dati tra i contenitori
Sto codificando un servizio client-server in cui il mio server invia file al client.
Nell'esempio seguente, ho provato a inviare un elenco di nomi di file al mio client.
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();
Cliente
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++;
}
Quindi quando eseguo il mio programma su java NetBeans IDE funziona come voglio. Ottengo i file
<---Available files--->
1)blank.wav
2)fuark.wav
Per la connessione docker ho creato una rete con
docker network create client_server_network
Corro il server con
docker run --env SERVER_HOST_ENV=server --network-alias server --network client_server_network -it server
e il cliente con
docker run --network client_server_network -it clientimage
Sebbene la connessione client-server abbia esito positivo tramite i contenitori Docker, quando eseguo entrambi i servizi non ottengo alcun output.
<---Available files--->
Sono bloccato in questo per giorni. Cosa potrebbe esserci di sbagliato? Se dovessi fornire altre informazioni, per favore dimmelo.
PS sul lato server della finestra mobile ho impostato l' immagine del server come hostnewclientSocket = new Socket("server", 4000)
Risposte
Il container ha il proprio file system diverso dal file system host. Il tuo percorso C:\ServerMusicStorage
non può funzionare nel tuo contenitore perché questo file non è nel tuo contenitore.
Dovresti dare un'occhiata per legare o volume
O copiare il file durante la creazione dell'immagine.
Inoltre il tuo percorsoèun percorso di Windows dovresti cambiarlo per un percorso unix (/ tuadirectory) perché la maggior parte delle immagini docker sono di sistema Linux
Se vuoi usare COPY nel tuo DockerFile basta aggiungere
COPY ServerMusicStorage/ /ServerMusicStorage
Ma se non sbaglio il file src dovrebbe essere un percorso relativo ... correlato a Quindi devi mettere / ServerMusicStorage vicino alla tua directory di compilazione