2016-09-21 61 views
0

我有一個應用程序通過TCP端口公開二進制協議。我正在考慮搬到碼頭,但有一個我遇到的問題。目前,我有一種升級服務器而不丟失連接的機制。基本上可以通過將端口移交給新的應用程序實例來升級服務器。我可以基於docker構建一個像這樣的圖層,但是我想知道是否有使用docker將端口連接從一個容器移交給另一個容器的方式。我希望我可以用同一個端口啓動一個新的容器,它只是神奇地工作。可悲的是,你顯然不允許附加到已映射的端口。碼頭集裝箱上的熱插拔端口映射

有沒有辦法做到這一點?或者我需要構建某種代理層?

回答

3

我建議去代理路由,因爲它會使事情更容易動態添加和刪除您的容器。也就是說,您可以使用--net container:name創建一個新的容器與另一個容器的網絡名稱空間。您將有相同的IP,甚至可以看到相同的連接:

$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMES 
13062f97a75c  registry:2   "/bin/registry serve " 11 weeks ago  Up 6 hours   0.0.0.0:5000->5000/tcp registry 

$ docker run -it --rm --net container:registry debian 

[email protected]:/# ps -ef 
UID  PID PPID C STIME TTY   TIME CMD 
root   1  0 0 20:22 ?  00:00:00 /bin/bash 
root   7  1 0 20:22 ?  00:00:00 ps -ef 

[email protected]:/# apt-get update && apt-get install net-tools 
... 

[email protected]:/# netstat -lnt 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State 
tcp6  0  0 :::5000     :::*     LISTEN 
+0

有趣......如何,即使是工作?他們都可以綁定到相同的端口?我需要使用SOREUSEPORT嗎? –

+0

它將每個容器的網絡放在同一個命名空間中。所以你在相同的網絡接口上。無論你如何重複使用容器外部進程之間的端口,希望在容器內也可以工作。 – BMitch