非常教程

Docker 17参考手册

引擎 | Engine

配置容器DNS(引擎) | Configure container DNS (Engine)

本节中的信息说明在 Docker 默认网桥中配置容器 DNS。这是一个在安装 Docker 时自动创建名为bridgebridge网络。

注意:通过 Docker 网络功能,您可以创建除默认网桥以外的用户定义网络。有关用户定义网络中 DNS 配置的更多信息,请参阅 Docker Embedded DNS 部分。

Docker 如何为每个容器提供主机名和 DNS 配置,而不必使用内部写入的主机名来构建自定义映像?它的诀窍是/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 做一些聪明的事情,例如resolv.conf当主机在稍后通过 DHCP 接收新的配置时,在所有容器中保持最新状态。Docker 如何在容器中维护这些文件的确切细节可以从一个 Docker 版本更改为下一个,因此您应该保留文件本身,并改为使用以下 Docker 选项。

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

-h HOSTNAME或--hostname = HOSTNAME

设置容器知道自己的主机名。这写入/ etc / hostname,写入/ etc / hosts 作为容器的面向主机的IP地址的名称,并且是容器内部的/ bin / bash 将在其提示符内显示的名称。但主机名不容易从容器外看到。它不会出现在 docker ps 中,也不会出现在任何其他容器的/ etc / hosts 文件中。

--link = CONTAINER_NAME或 ID:ALIAS

在运行容器时使用此选项会为新容器的/ etc / hosts 添加一个名为 ALIAS 的额外条目,该条目指向由 C ONTAINER_NAME_or_ID 标识的容器的 IP 地址。这使新容器内的进程连接到主机名称 ALIAS,而无需知道其 IP。下面将更详细地讨论--link =选项。由于 Docker 可能会在重新启动时为链接的容器分配不同的IP地址,因此 Docker 会更新收件人容器的/ etc / hosts 文件中的 ALIAS 条目。

--dns = IP_ADDRESS ...

将作为域名服务器行添加的IP地址设置为容器的/etc/resolv.conf 文件。容器中的进程在遇到不在/ etc / hosts中的主机名时,将连接到端口53上的这些 IP 地址,以查找名称解析服务。

--dns-search=DOMAIN...

通过在容器的/etc/resolv.conf 中写入搜索行来设置在容器内部使用裸露的不合格主机名时搜索的域名。例如,当容器进程尝试访问主机并设置搜索域 example.com 时,DNS 逻辑不仅会查找主机,还会查找 host.example.com。使用--dns-search =。如果你不想设置搜索域。

--dns-opt=OPTION...

通过将选项行写入容器的/etc/resolv.conf 来设置 DNS 解析器使用的选项。有关有效选项的列表,请参阅 resolv.conf 的文档

关于 DNS 设置,在没有的--dns=IP_ADDRESS...--dns-search=DOMAIN...--dns-opt=OPTION...选项,Docker 每个容器的/etc/resolv.conf模样/etc/resolv.conf主机(其中的docker守护进程(daemon)运行)。在创建容器时/etc/resolv.conf,守护进程(daemon)从主机的原始文件中过滤掉所有本地主机 IP 地址nameserver条目。

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

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

您可能想知道主机/etc/resolv.conf文件更改时会发生什么。docker守护进程(daemon)有一个文件改变通知活跃,将监视更改到主机的 DNS 配置。

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

当主机文件更改时,resolv.conf与主机匹配的所有停止的容器将立即更新为此最新的主机配置。在主机配置发生变化时运行的容器需要停下来,并且由于缺乏设施而开始采用主机更改,以确保resolv.conf在容器运行时对文件进行原子写入。如果容器resolv.conf从缺省配置启动后已经被编辑,则不会尝试替换,因为它会覆盖容器执行的更改。如果选项(--dns,,--dns-search--dns-opt)已用于修改默认主机配置,则更新主机的更换/etc/resolv.conf也不会发生。

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

docker, bridge, docker0, network

引擎 | Engine相关

1..NET核心应用程序(引擎) | .NET Core application (Engine)
2.关于图像,容器和存储驱动程序(引擎) | About images, containers, and storage drivers (Engine)
3.向swarm添加节点(Engine) | Add nodes to the swarm (Engine)
4.应用自定义元数据(引擎) | Apply custom metadata (Engine)
5.应用滚动更新(引擎) | Apply rolling updates (Engine)
6.apt-cacher-ng
7.编写Dockerfiles(引擎)的最佳实践 | Best practices for writing Dockerfiles (Engine)
8.二进制(引擎) | Binaries (Engine)
9.将容器端口绑定到主机(引擎) | Bind container ports to the host (Engine)
10.突破性变化(引擎) | Breaking changes (Engine)
11.建立自己的网桥 | Build your own bridge (Engine)
12.CentOS (Engine)
13.CentOS (Engine)
14.在用户定义的网络中配置容器DNS(引擎) | Configure container DNS in user-defined networks (Engine)
15.CouchDB (Engine)
16.创建基本映像(引擎) | Create a base image (Engine)
17.创建群(引擎) | Create a swarm (Engine)
18.自定义docker0网桥(引擎) | Customize the docker0 bridge (Engine)
19.Debian (Engine)
20.默认桥接网络 | Default bridge network
21.删除服务(引擎) | Delete the service (Engine)
22.部署服务(引擎) | Deploy a service (Engine)
23.将服务部署到一个群(引擎) | Deploy services to a swarm (Engine)
24.不推荐的引擎功能 | Deprecated Engine features
25.Docker容器网络(引擎) | Docker container networking (Engine)
26.Docker概述(引擎) | Docker overview (Engine)
27.Docker运行参考(引擎) | Docker run reference (Engine)
28.Dockerfile引用(引擎) | Dockerfile reference (Engine)
29.Dockerize应用程序 | Dockerize an application
30.排空节点(引擎) | Drain a node (Engine)
31.引擎 | Engine
32.FAQ(引擎) | FAQ (Engine)
33.Fedora (Engine)
34.开始 | Get started (Engine)
35.开始使用macvlan网络驱动程序 | Get started with macvlan network driver (Engine)
36.开始使用多主机网络 | Get started with multi-host networking (Engine)
37.节点如何工作 | How nodes work (Engine)
38.服务如何运作(引擎) | How services work (Engine)
39.图像管理 | Image management (Engine)
40.检查服务(引擎) | Inspect the service (Engine)
41.安装Docker(引擎) | Install Docker (Engine)
42.IPv6与Docker(引擎) | IPv6 with Docker (Engine)
43.将节点加入群集(引擎) | Join nodes to a swarm (Engine)
44.旧容器链接(引擎) | Legacy container links (Engine)
45.锁定你的群(引擎) | Lock your swarm (Engine)
46.管理群中的节点(引擎) | Manage nodes in a swarm (Engine)
47.使用Docker机密管理敏感数据(引擎) | Manage sensitive data with Docker secrets (Engine)
48.使用PKI管理swarm安全性(引擎) | Manage swarm security with PKI (Engine)
49.管理群体服务网络(引擎) | Manage swarm service networks (Engine)
50.迁移到引擎1.10 | Migrate to Engine 1.10
51.可选的Linux安装后步骤(引擎) | Optional Linux post-installation steps (Engine)
52.总览 | Overview (Engine)
53.总览 | Overview (Engine)
54.PostgreSQL(引擎) | PostgreSQL (Engine)
55.群集模式中的筏共识(引擎) | Raft consensus in swarm mode (Engine)
56.Riak (Engine)
57.以群集模式运行Docker Engine | Run Docker Engine in swarm mode
58.扩展服务(引擎) | Scale the service (Engine)
59.SDKs (Engine)
60.选择一个存储驱动 | Select a storage driver (Engine)
61.设置教程(引擎) | Set up for the tutorial (Engine)
62.SSHd (Engine)
63.存储驱动总览 | Storage driver overview (Engine)
64.存储服务配置数据(引擎) | Store service configuration data (Engine)
65.Swarm管理指南(引擎) | Swarm administration guide (Engine)
66.Swarm模式关键概念(引擎) | Swarm mode key concepts (Engine)
67.Swarm模式覆盖网络安全模型(引擎) | Swarm mode overlay network security model (Engine)
68.群模式概述(引擎) | Swarm mode overview (Engine)
69.Ubuntu (Engine)
70.Ubuntu (Engine)
71.了解容器通信(引擎) | Understand container communication (Engine)
72.使用多阶段构建(引擎) | Use multi-stage builds (Engine)
73.使用swarm模式路由网格(引擎) | Use swarm mode routing mesh (Engine)
74.使用AUFS存储驱动程序(引擎) | Use the AUFS storage driver (Engine)
75.使用Btrfs存储驱动程序(引擎) | Use the Btrfs storage driver (Engine)
76.使用设备映射器存储驱动程序(引擎) | Use the Device mapper storage driver (Engine)
77.使用OverlayFS存储驱动程序(引擎) | Use the OverlayFS storage driver (Engine)
78.使用VFS存储驱动程序(引擎) | Use the VFS storage driver (Engine)
79.使用ZFS存储驱动程序(引擎) | Use the ZFS storage driver (Engine)
80.处理图像 | Work with images
81.使用网络命令(引擎) | Work with network commands (Engine)
Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06