![](/img/trans.png)
[英]How do I create a docker container with two Java applications and Mysql server?
[英]How do I connect 2 Java websocket server applications in Docker?
我有2個通過本地主機端口81連接的Java Spring Boot應用程序。代碼可以在Eclipse中正常工作。 當我使用docker時,我嘗試公開端口,但失敗。 我無法在2個單獨的docker終端中使docker映像相互連接。
服務器代碼:
public static void main(String[] args) {
SpringApplication.run(SpringGetApplication.class, args);
try {
final int portNumber = 81;
ServerSocket serverSocket = new ServerSocket(portNumber);
while (true) {
// SOCKET MESSAGE SENDER
// SOCKET SENDS MESSAGE THEN CLOSES
Socket socket = serverSocket.accept();
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
// PW, PRINTWRITER SENDS STRINGS TO OTHER SERVER
pw.println("Hello");
// BUFFEREDREADER READS OTHER SERVER'S MESSAGES
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// WHILE LOOP TO KEEP READING LINE WHEN THE INPUTS ARE COMING
String answer = null;
while ((answer = br.readLine()) != null) {
System.out.println(answer);
}
pw.println("I HAVE SUCCESSFULLY RECIEVED YOUR DATA");
pw.close();
br.close();
}
} catch (Exception e) { }
}
客戶端代碼:
public static void main(String[] args) {
SpringApplication.run(SpringGetApplication.class, args);
try {
final String host = "localhost";
final int portNumber = 81;
System.out.println("Creating server socket on port " + portNumber);
Socket socket = new Socket(host, portNumber);
// READS RESPONSE FROM THE SERVER
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// PRINTWRITER USES SOCKET OUTPUT TO SEND THE DATA OUT TO THE OTHER SERVER
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
System.out.println("server says:" + br.readLine());
String outputTextToCC = "HOWDY THERE, i'M THE CLIENT";
// OUT SENDS THE STRING TO THE OTHER SERVER
out.println(outputTextToCC);
out.println("FINISH");
// READS RESPONSE FROM OTHER SERVER
System.out.println("server says:" + br.readLine());
br.close();
socket.close();
} catch (Exception e) { }
}
我為它們都創建了Docker映像,並在單獨的Docker終端上運行了這兩個映像。
docker run --expose=81 contactcentre2
docker run --expose=81 contactcentretest
我嘗試公開端口81,但是我的客戶端應用程序仍然無法連接到其他服務器。
在容器內部,您的應用程序不知道什么是“ localhost”。
如果您使用網絡IP,它將起作用。 更好的是,使用docker網絡或撰寫:
https://docs.docker.com/v17.09/engine/userguide/networking/#the-default-bridge-network
https://docs.docker.com/compose/
您將在此處找到一個示例: https : //docs.docker.com/compose/overview/
最后是這樣的:
version: '3'
services:
server:
image: server-img
ports:
- "81:81"
client:
image: client-img
links:
- server
然后,將“ localhost”替換為“ server”。
PS:您不需要從客戶端公開端口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.