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