我在同一網路中有兩台計算機,主機名稱和 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 伺服器必須能夠使用它。