专栏首页A周立SpringCloudDocker系列教程17-默认bridge网络中配置DNS

Docker系列教程17-默认bridge网络中配置DNS

本文依然是一篇翻译,英文原文https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/ ,译者周立。

本节描述如何在Docker默认网桥中配置容器DNS。 当您安装Docker时,就会自动创建一个名为 bridge 的桥接网络。

注意 : Docker网络功能 允许您创建除默认网桥之外的用户自定义网络。 有关用户自定义网络中DNS配置的更多信息,请参阅Docker嵌入式DNS 部分。

Docker如何为每个容器提供主机名和DNS配置,而无需在构建自定义Docker镜像时在内部写入主机名?它的诀窍是利用可以写入新信息的虚拟文件,在容器内覆盖三个关键的 /etc 文件。 你可以通过在一个容器中运行 mount 来看到这一点:

root@f38c87f2a42d:/# mount

...
/dev/disk/by-uuid/1fec...ebdf on /etc/hostname type ext4 ...
/dev/disk/by-uuid/1fec...ebdf on /etc/hosts type ext4 ...
/dev/disk/by-uuid/1fec...ebdf on /etc/resolv.conf type ext4 ...
...

这样一来,Docker可以让宿主机在稍后通过DHCP接收到新的配置后,使所有容器中的 resolv.conf 保持最新状态。 Docker在容器中维护这些文件的具体细节可能会可能会随着Docker版本的演进而改变,因此您不该自己管理/etc文件,而应该用以下Docker选项。

四个不同的选项会影响容器域名服务。

设置容器的主机名。 该设置的值将会被写入 /etc/hostname;写入 /etc/hosts 作为容器的面向主机IP地址的名称(笔者按:在/etc/hosts里添加一条记录,IP是宿主机可以访问的IP,host就是你设置的host),并且是容器内部 /bin/bash 在其提示符下显示的名称。 但主机名不容易从容器外面看到。 它不会出现在 docker ps或任何其他容器的 /etc/hosts 文件中。

在没有 --dns=IP_ADDRESS...--dns-search=DOMAIN...--dns-opt=OPTION...选项的情况下,Docker使每个容器的 /etc/resolv.conf 看起来像宿主机的 /etc/resolv.conf 。当创建容器的 /etc/resolv.conf ,Docker daemon会从主机的原始文件中过滤掉所有localhost IP地址 nameserver 条目。

过滤是必要的,因为主机上的所有localhost地址都不可从容器的网络中访问。 过滤之后,如果容器的 /etc/resolv.conf 文件中没有更多的 nameserver 条目,Docker daemon会将Google DNS名称服务器(8.8.8.8和8.8.4.4)添加到容器的DNS配置中。 如果守护进程启用了IPv6,则也会添加公共IPv6 Google DNS名称服务器(2001:4860:4860::8888 和 2001:4860:4860::8844)。

注意 :如果您需要访问主机的localhost解析器,则必须在主机上修改DNS服务,以便侦听从容器内可访问的non-localhost地址。

您可能会想知道宿主机的 /etc/resolv.conf 文件发生了什么变化。 docker daemon有一个文件更改通知程序,它将监视主机DNS配置的更改。

注意 :文件更改通知程序依赖于Linux内核的inotify功能。由于此功能目前与overlay文件系统驱动不兼容,因此使用“overlay”的Docker daemon将无法利用 /etc/resolv.conf 自动更新的功能。

当宿主机文件更改时,所有 resolv.conf 与主机匹配的停止的容器将立即更新到最新的主机配置。 当宿主机配置更改时,运行的容器将需要停止并开始接收主机更改,这是由于缺少设备,以确保在容器运行时对 resolv.conf 文件的原子写入。 如果容器修改了默认的 resolv.conf 文件,则不会替换该文件,因为如果替换,将会覆盖容器执行的更改。 如果选项( --dns--dns-search--dns-opt )已被用于修改默认的主机配置,则更换主机的 /etc/resolv.conf 也不会发生。

注意 :对于在Docker 1.5.0中实现 /etc/resolv.conf 更新功能之前创建的容器:当主机 resolv.conf文件更改时,这些容器将不会收到更新。 只有使用Docker 1.5.0及以上版本创建的容器才能使用此自动更新功能。

拓展阅读

Docker存储驱动的选择:https://docs.docker.com/engine/userguide/storagedriver/selectadriver/#docker-ce

本文分享自微信公众号 - A周立SpringCloud(gh_e6849e368b5f)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker系列教程15-Docker容器网络

    本文是篇翻译。原文:https://docs.docker.com/engine/userguide/networking/ 本节概述了Docker默认的网络行...

    用户1516716
  • Docker系列教程09-使用Docker Hub管理镜像

    Docker Hub是Docker官方维护的Docker Registry,上面存放着很多优秀的镜像。不仅如此,Docker Hub还提供认证、工作组结构、工作...

    用户1516716
  • Docker系列课程01-Docker简介

    1.1 Docker简介 Docker是一个开源的容器引擎,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样...

    用户1516716
  • 英文、拼音齐出动:domains.net很抢眼

    因国家文化差异,所以拼音域名在国内很吃香,而英文域名在海外则备受关注,这两类域名在各自的领地驰骋多年,都属于人见人爱的域名品种,近日这两类域名在市场...

    躲在树上的域小名
  • 系统补白:流畅的python(1)

    初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

    一粒小麦
  • java中集合关系图

    黑泽君
  • 字符串的压缩以及解压缩

    shengjk1
  • 【java基础】zip压缩文件

    用户5640963
  • 图像识别 | 使用 Java 实现AI人工智能技术-图像识别功能

    说到语音识别、语音翻译、图像识别、人脸识别等等,现在已经非常非常非常普及了,看过‘最强大脑’的朋友,也应该对‘小度’这个机器人有所了解,战胜国际顶尖的‘大脑’-...

    码神联盟
  • windows本地配置php(yii)+nginx+fastcgi

     (注意,这里配置了server_name为www.yii.com。需要同时配置host文件,把www.yii.com映射到127.0.0.1)

    smy

扫码关注云+社区

领取腾讯云代金券