?
This document uses PHP Chinese website manual Release
本節(jié)中的信息涵蓋了用戶定義網絡中的容器的嵌入式 DNS 服務器操作。與連接到default bridge
網絡的容器相比,連接到用戶定義網絡的容器的 DNS 查找工作方式不同。
注意:為了保持向后兼容性,
default bridge
網絡中的 DNS 配置將保留,而不會改變行為。有關網絡中 DNS 配置的更多信息,請參閱默認default bridge
網橋中的 DNS 布局 。
從Docker 1.10開始,docker 守護進程實現(xiàn)了一個嵌入式 dns 服務器,它為使用有效的 dns 創(chuàng)建的任何容器提供內建服務發(fā)現(xiàn)。name
或net-alias
或別名為link
有關 Docker 如何管理容器內的 DNS 配置的詳細信息,可以從一個 Docke r版本更改為下一個版本。因此,您不應該假設文件的方式,例如/etc/hosts
,/etc/resolv.conf
在容器中進行管理,并將文件保持在單獨的位置,然后使用以 下Docker 選項。
影響容器域名服務的各種容器選項。
--name = CONTAINER-NAME | 使用--name 配置的容器名稱用于發(fā)現(xiàn)用戶定義的泊塢網內的容器。嵌入式 DNS 服務器維護容器名稱和其IP地址(在容器連接的網絡上)之間的映射。 |
---|---|
--network-alias=ALIAS | 除了上面描述的名稱之外,容器還可以通過其中一個或多個配置的網絡別名(或 docker 網絡連接命令中的--alias)在用戶定義的網絡中發(fā)現(xiàn)。嵌入式 DNS 服務器維護所有容器別名與其在特定用戶定義網絡上的 IP 地址之間的映射。通過在 docker network connect 命令中使用--alias 選項,容器可以在不同網絡中具有不同的別名。 |
--link = CONTAINER_NAME:ALIAS | 在運行容器時使用此選項可為嵌入式 DNS 添加一個名為 ALIAS 的額外條目,該條目指向由 CONTAINER_NAME 標識的容器的 IP 地址。當使用 - 鏈接嵌入式 DNS 時,將保證僅在使用--link 的容器上進行本地化查找結果。這使得新容器內的進程可以連接到容器,而無需知道其名稱或 IP。 |
--dns = IP_ADDRESS ... | 如果嵌入式 DNS 服務器無法解析來自容器的名稱解析請求,則通過--dns 選項傳遞的 IP 地址將被嵌入式 DNS 服務器用于轉發(fā)DNS查詢。這些--dns IP 地址由嵌入式DNS服務器管理,并且不會在容器的/etc/resolv.conf 文件中更新。 |
--dns-search=DOMAIN... | 設置在容器內部使用裸露的不合格主機名時搜索的域名。這些--dns-search 選項由嵌入式 DN S服務器管理,不會在容器的/etc/resolv.conf 文件中更新。例如,當容器進程嘗試訪問主機并設置搜索域 example.com 時,DNS 邏輯不僅會查找主機,還會查找 host.example.com。 |
--dns-opt=OPTION... | 設置 DNS 解析器使用的選項。這些選項由嵌入式 DNS 服務器管理,不會在容器的/etc/resolv.conf文件中更新。有關有效選項的列表,請參閱 resolv.conf 的文檔。 |
在不存在的--dns=IP_ADDRESS...
,--dns-search=DOMAIN...
或--dns-opt=OPTION...
選擇,Docker 使用/etc/resolv.conf
主機(其中的docker
守護進程(daemon)中運行)。這樣做時,守護進程(daemon)會從主機的原始文件中過濾掉所有本地主機 IP 地址條目nameserver
。
過濾是必要的,因為主機上的所有本地主機地址都無法從容器的網絡訪問。在過濾之后,如果容器的/etc/resolv.conf
文件中沒有剩余nameserver
條目,守護進程(daemon)將公共 Google DNS 名稱服務器(8.8.8.8和8.8.4.4)添加到容器的
DNS 配置中。如果守護程序啟用了 IPv6,則還將添加公共 IPv6 Google DNS 名稱服務器(2001:4860:4860 :: 8888和2001:4860:4860 :: 8844)。
注意:如果您需要訪問主機的本地主機解析程序,則必須修改主機上的 DNS 服務以偵聽可從容器內訪問的非本地主機地址。注意:DNS 服務器始終處于
127.0.0.11
。