2016-09-21 62 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