Docker容器上的热插拔端口映射

时间:2016-09-21 19:44:27

标签: docker

我有一个通过TCP端口公开二进制协议的应用程序。我正在考虑转移到码头工人,但我遇到了一个问题。目前,我有一种升级服务器而不丢弃连接的机制。我能够通过将端口基本上移交给新的应用程序实例来升级服务器。我可以基于docker构建这样的层,但是我想知道是否有一种方法可以使用docker将端口连接从一个容器移交给另一个容器。我希望我能用相同的端口启动一个新容器,它只会神奇地工作。遗憾的是,您显然不允许附加到已映射的端口。

有办法做到这一点吗?或者我是否需要构建某种代理层?

1 个答案:

答案 0 :(得分: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

root@13062f97a75c:/# 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

root@13062f97a75c:/# apt-get update && apt-get install net-tools
...

root@13062f97a75c:/# netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp6       0      0 :::5000                 :::*                    LISTEN