公共IP映射到Docker中的内部共享虚拟IP地址

时间:2016-01-27 21:04:56

标签: docker virtual-ip-address

我在OSX上使用Docker并创建了一个带有桥接网络的主机和几个共享虚拟IP的容器(所以172.19.0.50指向172.19.0.1,如果该容器发生故障,则指向172.19.0.50在172.19.0.2等等)。该网络中的其他容器可以访问172.19.0.50并按计划查看其中一个框,到目前为止一直很好。

我很困惑的是如何指出我的公共192.168.99.100 IP,使其达到172.19.0.50而不是特定的容器IP。

这是一个我不太熟悉的领域,所以任何建议都非常赞赏。

1 个答案:

答案 0 :(得分:0)

经过一番研究,在我看来目前还没有“码头工作者解决方案”。我有完全相同的问题:我在1个docker主机上的3个容器上有一个galera集群。假设您需要像我一样访问容器上的端口3306。 我在那些galera节点上管理虚拟IP,效果很好。但我不能告诉Docker将端口的主机(在我的情况下为mysql的3306)与virtual_ip:3306相匹配。必须将主机端口映射到容器和端口。不是IP地址。 如果您运行具有虚拟IP的容器,并使用如下端口映射:

docker run -d -p 3306:3306 docker_image /bin/bash

对3306上的公共主机IP地址的请求将被重定向到容器网络接口的端口3306(理论上有2个地址,一个是静态的,另一个是虚拟的)。但是,如果您的虚拟IP移动到另一个docker,它将不会更改任何端口映射。无论如何,来自外部的请求将被重定向到第一个容器。 (顺便说一句,你不能将多个容器映射到同一个docker主机的端口。实际上,它没有帮助)

在我看来,您可以在容器中使用HAProxy或Nginx反向代理:因此您可以将3306的主机端口映射到HAProxy的3306端口,并且HAProxy可以将您的请求重定向到群集(有或没有负载均衡)。所以现在你甚至不需要虚拟IP。 但是,现在你有一个很好的单点故障。将另一个反向代理添加为备份会很好,但是你需要一个虚拟IP来进行故障转移,你会遇到问题的开始。

如果有人有更好的解决方案......