2016-01-27 120 views
1

我在OSX上使用Docker,並創建了一個具有橋接網絡和多個共享虛擬IP的容器的主機(因此172.19.0.50指向172.19.0.1和如果該容器關閉,則172.19.0.50指向172.19.0.2等等)。此網絡中的其他容器可以訪問172.19.0.50,並且可以按計劃看到其中任何一個盒子,這是迄今爲止最好的。公共IP映射到Docker中的內部共享虛擬IP地址

我很困惑的地方是我的公共192.168.99.100 IP如何指向172.19.0.50,而不是特定的容器IP。

這是一個我不太熟悉的領域,所以任何建議非常感謝。

+0

我不知道如果我理解你的問題,但我認爲你需要與容器IP 172.19.0.50映射IP您泊塢窗主機 –

+0

令人困惑的是哪些網絡在哪裏。你能解釋一下VirtuaBox上哪些網絡位於虛擬機上,哪些是容器?查看用於創建容器和Docker網絡的命令也很有幫助。 –

+0

謝謝大家。這是一個相當複雜的集合,現在有很多使用PGPool HA和Postgres HA的容器 - 我試圖簡化上面的問題以找到問題的核心,但沒有做出很好的工作:-(@HemersonVarela你所說的聽起來很接近我可以訪問.50,如果我登錄到其中一個容器,但是我不能從主機訪問它 – stevenlivz

回答

0

經過一番研究,在我看來,目前沒有「碼頭解決方案」。我有完全相同的問題:我有1個碼頭主機上的3個容器上的galera羣集。假設你需要訪問容器上的端口3306,就像我一樣。 我在這些加萊拉節點上管理一個虛擬IP,它效果很好。但是我不能告訴Docker匹配端口的主機(在我的情況下爲3306)到virtual_ip:3306。您主機的端口必須映射到容器和端口。不是IP地址。 如果您運行的是具有虛擬IP的容器,用端口映射是這樣的:

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

在3306請求到公共主機IP地址將被重定向到您的集裝箱網絡接口的端口3306(具有理論上2個地址,一個靜態地址和一個虛擬地址)。但是如果你的虛擬IP移動到另一個碼頭,它不會改變你的端口映射。無論如何,來自外部的請求將被重定向到第一個容器。 (順便說一下,你不能將多個容器映射到同一個碼頭主機的端口,實際上,它不會幫助)

在我看來,你可以在容器中使用HAProxy或Nginx反向代理:因此您可以將3306的主機端口映射到HAProxy的3306端口,並且HAProxy可以將請求重定向到羣集(帶或不帶負載平衡)。所以現在你甚至不需要虛擬IP。 但是,現在你有一個很好的單點故障。將另一個反向代理添加爲備份會很好,但是您需要一個用於故障轉移的虛擬IP,並且您會被困在開始的問題中。

如果有人有更好的解決這個...

+0

https:// groups。 google.com/forum/#!topic/docker-user/Y80Pby5ikbI – Newbie