作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个通过 TCP 端口公开二进制协议(protocol)的应用程序。我正在考虑转移到 docker,但我遇到了一个问题。目前,我有一种在不断开连接的情况下升级服务器的机制。我基本上可以通过将端口移交给新的应用程序实例来升级服务器。我可以基于 docker 构建这样的层,但我想知道是否有一种方法可以使用 docker 将端口连接从一个容器移交给另一个容器。我希望我可以用相同的端口启动一个新容器,它会神奇地工作。可悲的是,您显然不允许附加到已映射的端口。
有没有办法做到这一点?还是我需要构建某种代理层?
最佳答案
我建议使用代理路由,因为它会使动态添加和删除容器变得更加容易。也就是说,您可以使用 --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
关于docker - docker 容器上的热插拔端口映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39625273/
我是一名优秀的程序员,十分优秀!