1

我在 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。

这是一个我不太熟悉的领域,因此非常感谢任何建议。

4

1 回答 1

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 进行故障转移,并且您会遇到一开始的问题。

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

于 2016-02-02T13:18:32.707 回答