Docker ve java soketleri: Kapsayıcılar arasında veri paylaşın

Jan 11 2021

Sunucumun istemciye dosya gönderdiği bir istemci-sunucu hizmetini kodluyorum.

Aşağıdaki örnekte, istemcime bir dosya adları listesi göndermeye çalıştım.

Sunucu

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

Müşteri

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

Programımı java NetBeans IDE'de çalıştırdığımda istediğim gibi çalışıyor. Dosyaları alıyorum

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

Docker bağlantısı için bir ağ oluşturdum

docker network create client_server_network

Sunucuyu şununla çalıştırıyorum

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

ve müşteri ile

docker run --network client_server_network -it clientimage

İstemci-sunucu bağlantısı docker kapsayıcıları aracılığıyla başarılı olsa da , her iki hizmeti de çalıştırdığımda herhangi bir çıktı almıyorum.

<---Available files--->

Günlerce buna sıkıştım. Sorun ne olabilir? Başka bir bilgi vermem gerekirse lütfen bana söyleyin.

Docker'ın sunucu tarafında PS Sunucu imajını ana bilgisayar olarak ayarlıyorumnewclientSocket = new Socket("server", 4000)

Yanıtlar

Ruokki Jan 11 2021 at 16:48

Konteyner, ana bilgisayar dosya sisteminden farklı kendi dosya sistemine sahiptir. C:\ServerMusicStorageBu dosya kapsayıcınızda olmadığı için yolunuz kapsayıcınızda çalışamaz.

Bağlamak veya hacim için bir göz atmalısınız

Veya görüntünüzü oluştururken dosyayı kopyalar.

Ayrıca yolunuz bir Windows yoludur, bunu bir unix yolu (/ yourdirectory) için değiştirmeniz gerekir çünkü docker imajlarının çoğu linux sistemidir.

DockerFile'ınızda COPY kullanmak istiyorsanız, sadece şunu ekleyin:

COPY ServerMusicStorage/ /ServerMusicStorage 

Yanılmıyorsam Ama src dosyası göreli bir yol ... olmalı ilişkin Eğer yapı dir yakın / ServerMusicStorage koymak zorunda Yani