Docker 默认bridge网络中配置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选项。

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

参数 描述
-h HOSTNAME or --hostname=HOSTNAME 设置容器的主机名。 该设置的值将会被写入/etc/hostname ;写入/etc/hosts 作为容器的面向主机IP地址的名称(笔者按:在/etc/hosts里添加一条记录,IP是宿主机可以访问的IP,host就是你设置的host),并且是容器内部/bin/bash 在其提示符下显示的名称。 但主机名不容易从容器外面看到。 它不会出现在docker ps 或任何其他容器的/etc/hosts文件中。
--link=CONTAINER_NAMEor ID:ALIAS 在run 容器时使用此选项为新容器的/etc/hosts 添加了一个名为ALIAS的额外条目,指向由CONTAINER_NAME_or_ID标识的CONTAINER_NAME_or_ID的IP地址。这使得新容器内的进程可以连接到主机名ALIAS 而不必知道其IP。 --link=选项将在下面进行更详细的讨论。 因为Docker可以在重新启动时为链接的容器分配不同的IP地址,Docker会更新收件人容器的/etc/hosts 文件中的ALIAS条目。
--dns=IP_ADDRESS... 在容器的/etc/resolv.conf文件添加nameserver 行,IP地址为指定IP。 容器中的进程在如果需要访问/etc/hosts 里的主机名,就会连接到这些IP地址的53端口,寻找名称解析服务。
--dns-search=DOMAIN... 通过在容器的/etc/resolv.conf写入search 行,在容器内使用裸不合格的主机名时搜索的域名。 当容器进程尝试访问host 并且搜索域example.com 被设置时,例如,DNS逻辑不仅将查找host ,还将查找host.example.com 。使用--dns-search=. 如果您不想设置搜索域。
--dns-opt=OPTION... 通过将options 行写入容器的/etc/resolv.conf 设置DNS解析器使用的选项。有关有效选项的列表,请参阅resolv.conf文档

在没有--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及以上版本创建的容器才能使用此自动更新功能。

原文
https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker为网络bridge模式指定容器ip的方法

    前言 众所周知bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace.设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上.下面来看看Docker为网络bridge模式指定容器ip的方法. 实现方法 如果只是简单创建一个bridge模式的网络是无法给容器指定ip的 [root@vultrvpn conf.d]# docker network create --driver bridge wordpress_net ad1ff3d972

  • Docker 配置网络使用bridge网络的方法

    就网络而言,桥接网络(bridge network,也叫网桥)是一种链路层设备,用于转发网段之间的流量. bridge 可以是硬件设备或在主机内核中运行的软件设备. 对 Docker 而言,桥接网络使用允许容器连接到同一个桥接网络来通信的软件网桥,同时提供与未连接到该桥接网络的容器的隔离.Docker bridge 驱动程序自动在主机中安装规则使不同桥接网络上的容器不能直接相互通信. 桥接网络用于在同一个 Docker 守护进程上运行的容器通信.对于不同 Docker 守护进程的容器,可以在操作

  • Docker 默认bridge网络中配置DNS的方法

    本节描述如何在Docker默认网桥中配置容器DNS. 当您安装Docker时,就会自动创建一个名为bridge 的桥接网络. 注意 : Docker网络功能允许您创建除默认网桥之外的用户自定义网络. 有关用户自定义网络中DNS配置的更多信息,请参阅Docker嵌入式DNS部分. Docker如何为每个容器提供主机名和DNS配置,而无需在构建自定义Docker镜像时在内部写入主机名?它的诀窍是利用可以写入新信息的虚拟文件,在容器内覆盖三个关键的/etc 文件. 你可以通过在一个容器中运行mount

  • Docker使用Calico网络模式配置及问题处理方法

    目录 一.Calico介绍 二.Calico优势 三.环境介绍: 四.配置ETCD集群 五. 安装Docker,配置使用集群存储 六.配置calico基于sysinit方式启动 七.测试calico网络 参考: 一.Calico介绍 Calico是一种容器之间互通的网络方案,在虚拟化平台中,比如OpenStack.Docker等都需要实现workloads之间互连,但同时也需要对容器做隔离控制,就像在Internet中的服务仅开放80端口.公有云的多租户一样,提供隔离和管控机制.而在多数的虚拟化

  • docker 中配置 eureka的方法

    eureka: 1. 构建 jdk 镜像 启动 eureka 容器 准备jdk文件夹和所有需要的文件 mkdir ~/jdk cd ~/jdk # 上传 jdk 压缩文件到 /root/jdk/ 目录 # 课前资料/docker/tomcat7/jdk....gz # 创建Dockerfile vim Dockerfile 复制下面内容 java -jar a.jar --server.port=80 --spring.profiles.active=a FROM centos:7 ADD jd

  • Windows Server2012 安装配置DNS服务器方法详解

    在云服务器 Windows Server2012 上安装配置DNS服务器方法,安装与配置非常简单,在这里写个完整教程方便大家查询 一.安装DNS服务器 1.打开服务器管理器,点击添加角色和功能 2.一直下一步,选择基于角色或基于功能的安装 3.选择目标服务器,只有一台 4.添加DNS服务器 5.一直下一步直到安装成功 二.配置DNS服务器 之前安装好了DNS服务器,但是还需要进一步的配置.这里,我要将百度的ip地址,解析到自定义的域名www.wcfwcf.com上 1.安装DNS服务器成功后可以

  • PHP中PDO连接数据库中各种DNS设置方法小结

    本文实例总结了PHP中PDO连接数据库中各种DNS设置方法.分享给大家供大家参考,具体如下: pdo中DNS书写方式如下: mssql:host=localhost;dbname=testdb sybase:host=localhost;dbname=testdb dblib:host=localhost;dbname=testdb firebird:User=john;Password=mypass;Database=DATABASE.GDE;DataSource=localhost;Port

  • 利用Python实现在同一网络中的本地文件共享方法

    本文利用Python3启动简单的HTTP服务器,以实现在同一网络中共享本地文件. 启动HTTP服务器 打开终端,转入目标文件所在文件夹,键入以下命令: $ cd /Users/zero/Documents/localFiles # python -m http.server <port number> $ sudo python3 -m http.server 8092 Serving HTTP on 0.0.0.0 port 8092 (http://0.0.0.0:8092/) ... 生

  • 在webstorm中配置less的方法详解

    首先你要有node和npm的环境,没得话先下载. https://nodejs.org/en/ 然后下载less cnpm install less -g npm install less -g cnpm用的是淘宝镜像 -g全局下载 上面的那个地址你先复制好,我的是这个: C:\Users\18309\AppData\Roaming\npm\lessc 然后看着这个图弄: 把上面的路径复制过来后面再加上.cmd C:\Users\18309\AppData\Roaming\npm\lessc.c

  • 详解在Java的Struts2框架中配置Action的方法

    在Struts2中Action部分,也就是Controller层采用了低侵入的方式.为什么这么说?这是因为在Struts2中action类并不需要继承任何的基类,或实现任何的接口,更没有与Servlet的API直接耦合.它通常更像一个普通的POJO(通常应该包含一个无参数的execute方法),而且可以在内容定义一系列的方法(无参方法),并可以通过配置的方式,把每一个方法都当作一个独立的action来使用,从而实现代码复用. 例如: package example; public class U

  • IIS6中配置PHP的方法 200911

    一,环境说明: OS:windows server 2003 r2 企业版 SP2: IIS6.0:php-5.2.11:MySql5.1.40: phpMyAdmin-3.2.3-all-languages 二,配置PHP步骤 1,将下载下来的php压缩包解压到一个目录,如c:\php 2,设置环境变量,我的电脑->属性->高级->环境变量->系统变量, 在变量path后面追加php和php扩展的路径,分别是,C:\php;C:\php\ext 3,打开IIS管理器, 1)添加一

  • Asp.Net MVC中配置Serilog的方法

    一.Serilog介绍 Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 二.配置方法 接下来就简单的介绍一下在Asp.Net MVC中如何配置是Serilog 生效: 1):下载并且安装Seq,具体的下载URL 为 [http://getseq.net/Download],安装到默认的路径之后,实际上时候启动了一个Win Service,并且监听的端口号默认为 5341. 安装的最后

随机推荐