docker 如何使用主機名稱與本機網路中的其他主機通訊?

docker 如何使用主機名稱與本機網路中的其他主機通訊?

我在同一網路中有兩台計算機,主機名稱和 IP 位址(動態 IP)如下:

host1.local - 10.0.0.11
host2.local - 10.0.0.12

host1正在使用預設配置運行 Docker。

中的容器host1可以host2使用 IP 位址進行連接10.0.0.12,但無法host2使用主機名稱進行連接host2.local。誰能告訴我容器如何直接連接到hosts2使用的主機名稱。請注意,兩台伺服器host1, host2都在 DHCP 伺服器中,並且沒有固定的 IP 位址,因此設定文件/etc/主機在我的情況下不起作用。

答案1

Docker 容器通常位於預設橋接網絡:

當啟動 Docker 時,會自動建立預設的橋接網路(也稱為網橋),除非另有說明,新啟動的容器都會連接到該網路。

您還可以擁有使用者定義的橋接器及其自己的 DNS 服務:

使用者定義的橋提供容器之間的自動 DNS 解析。

在使用者定義的橋接網路上,容器可以透過名稱或別名相互解析。

還有其他選項可以在容器中配置 DNS 解析(請參閱這裡):

預設情況下,容器繼承/etc/resolv.conf設定檔中定義的主機的 DNS 設定。使用預設橋接網路的容器會取得此檔案的副本,而使用自訂網路的容器則使用 Docker 的嵌入式 DNS 伺服器,該伺服器將外部 DNS 查找轉送至主機上設定的 DNS 伺服器。

/etc/hosts 中定義的自訂主機不會被繼承。若要將其他主機傳遞到容器中,請參閱 docker run 參考文件中的「向容器主機檔案新增項目」。您可以針對每個容器覆蓋這些設定。

將條目新增至容器主機文件說:

/etc/hosts您可以使用一個或多個標誌將其他主機新增至容器的檔案--add-host。此範例會為名為 docker 的主機新增靜態位址:

$ docker run --add-host=docker:93.184.216.34 --rm -it alpine

當然你也可以設定上游DNS伺服器來正確解析*.local。如果您為此使用 mDNS,則上游 DNS 伺服器必須能夠使用它。

相關內容