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

简介: 原文:http://www.itmuch.com/docker/18-docker-user-network-embeded-dns/ ,转载请说明出处。

原文:http://www.itmuch.com/docker/18-docker-user-network-embeded-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

目录
相关文章
|
2月前
|
安全 网络协议 算法
Nmap网络扫描工具详细使用教程
Nmap 是一款强大的网络发现与安全审计工具,具备主机发现、端口扫描、服务识别、操作系统检测及脚本扩展等功能。它支持多种扫描技术,如 SYN 扫描、ARP 扫描和全端口扫描,并可通过内置脚本(NSE)进行漏洞检测与服务深度枚举。Nmap 还提供防火墙规避与流量伪装能力,适用于网络管理、渗透测试和安全研究。
464 1
|
4月前
|
JSON 监控 API
在线网络PING接口检测服务器连通状态免费API教程
接口盒子提供免费PING检测API,可测试域名或IP的连通性与响应速度,支持指定地域节点,适用于服务器运维和网络监控。
|
8月前
|
存储 缓存 网络协议
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。
|
6月前
|
域名解析 应用服务中间件 Shell
使用nps配置内网穿透加域名解析
使用nps配置内网穿透加域名解析
790 76
|
5月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
|
6月前
|
网络协议 安全 Devops
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
215 4
|
7月前
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1056 31
|
7月前
|
域名解析 API PHP
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
本文介绍了如何通过网络穿透技术让公网直接访问家庭电脑,充分发挥本地硬件性能。相比第三方服务受限于转发带宽,此方法利用自家宽带实现更高效率。文章详细讲解了端口映射教程,包括不同网络环境(仅光猫、光猫+路由器)下的设置步骤,并提供实时同步动态IP的两种方案:自建服务器或使用三方API接口。最后附上VM虚拟机全版本下载链接,便于用户在穿透后将服务运行于虚拟环境中,提升安全性与适用性。
|
8月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
279 15
|
8月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。

相关产品

  • 云解析DNS
  • 推荐镜像

    更多
  • DNS