我在容器中运行二进制协议TCP服务器。为了便于零停机升级,我构建了一个流,其中实例可以通过unix域套接字将其服务器套接字转发到新容器中的服务器。在第一个容器关闭的那一刻,这就像一个魅力。由于它是已发布端口的容器,因此端口在容器关闭后取消发布。我正试图找出处理这种情况的最佳方法。
以下是我正在做的事情的基本概述:
# start the first container, starts listening on 3290
docker run -p 3290:3290 --name first /my/server/app
# start the second container, "steals" the server socket on 3290 from first
docker run --net container:first /my/server/app
# the second container, at this point, is handling connections from 3290
# when the first container is killed below, the port is de-published
# and the second container stops receiving connections
docker rm first
起初,我认为用户定义的网络效果最好,但我找不到在用户定义的网络上发布端口的方法。我正在考虑的另一个选择是构建另一个处理端口发布的容器,然后让所有其他容器从该运行容器中借用网络。我认为这种方法是有效的,我只是不喜欢这个额外的容器不能用于其他目的的想法。虽然也许这是唯一的解决方案,想法?
答案 0 :(得分:0)
https://docs.docker.com/engine/swarm/:
负载平衡:您可以将服务端口公开给外部负载均衡器。在内部,swarm允许您指定如何在节点之间分发服务容器。
这篇文章底部的视频可能对你很有意思:https://blog.docker.com/2016/06/docker-1-12-built-in-orchestration/。