【问题标题】:Public IP mapping to internal shared virtual ip address in Docker公共 IP 映射到 Docker 中的内部共享虚拟 IP 地址
【发布时间】:2016-01-27 21:04:55
【问题描述】:

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

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

【问题讨论】:

  • 我不确定我是否理解您的问题,但我认为您需要将 docker 主机的 IP 与 IP 为 172.19.0.50 的容器映射
  • 令人困惑的是哪些网络在哪里。你能解释一下 VirtuaBox 中的哪些网络,哪些是虚拟机,哪些是容器?查看用于创建容器和 Docker 网络的命令也会有所帮助。
  • 谢谢各位。现在这是一个相当复杂的集合,其中有许多使用 PGPool HA 和 Postgres HA 的容器 - 我试图在上面进行简化以解决问题的核心,但没有做得很好:-( @HemersonVarela 你在说什么听起来很接近到我想做的事情。如果我登录到其中一个容器,我可以访问 .50,但我无法从主机访问它。
  • docker run 上的 -p 标志告诉 Docker 将容器内任何需要的网络端口映射到主机。
  • 我正在使用撰写。如果在“端口”部分的 yml 中我做了 ip:port 会产生相同的效果,即使映射到虚拟 ip 而不是 docker 分配的容器 ip?如果我在容器中执行 ifconfig,它确实有 docker 分配的 ip 和虚拟 ip。我使用的命令是docker-compose -p MyCustomNetwork --x-networking up。谢谢。

标签: docker virtual-ip-address


【解决方案1】:

经过一些研究,在我看来,目前还没有“docker 解决方案”。我有完全相同的问题:我在 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 进行故障转移,并且您会遇到一开始的问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多