©
本文档使用 PHP中文网手册 发布
本节中的信息涵盖了用户定义网络中的容器的嵌入式 DNS 服务器操作。与连接到default bridge
网络的容器相比,连接到用户定义网络的容器的 DNS 查找工作方式不同。
注意:为了保持向后兼容性,
default bridge
网络中的 DNS 配置将保留,而不会改变行为。有关网络中 DNS 配置的更多信息,请参阅默认default bridge
网桥中的 DNS 布局 。
从Docker 1.10开始,docker 守护进程实现了一个嵌入式 dns 服务器,它为使用有效的 dns 创建的任何容器提供内建服务发现。name
或net-alias
或别名为link
有关 Docker 如何管理容器内的 DNS 配置的详细信息,可以从一个 Docke r版本更改为下一个版本。因此,您不应该假设文件的方式,例如/etc/hosts
,/etc/resolv.conf
在容器中进行管理,并将文件保持在单独的位置,然后使用以 下Docker 选项。
影响容器域名服务的各种容器选项。
--name = CONTAINER-NAME | 使用--name 配置的容器名称用于发现用户定义的泊坞网内的容器。嵌入式 DNS 服务器维护容器名称和其IP地址(在容器连接的网络上)之间的映射。 |
---|---|
--network-alias=ALIAS | 除了上面描述的名称之外,容器还可以通过其中一个或多个配置的网络别名(或 docker 网络连接命令中的--alias)在用户定义的网络中发现。嵌入式 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 服务器用于转发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
。