docker容器dns之resolv.conf

Posted fengzi-2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker容器dns之resolv.conf相关的知识,希望对你有一定的参考价值。

  • 基础信息

操作系统:CentOS Linux release 7.2.1511 (Core)

Docker版本:Server Version: 1.9.1

 

  • 拉取基础镜像

Rhel:7.2 为直接从docker HUb中pull下来的镜像

 

  • 场景1

主机配置文件

[[email protected] ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.1.2

 

启动容器

[[email protected] ~]# docker exec -it a5028d60979f /bin/bash
[[email protected] /]# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.1.2
[[email protected] /]#

 

  • 场景2

主机配置文件

[[email protected] ~]# cat /etc/resolv.conf 
[[email protected] ~]#

 

启动容器

[[email protected] ~]# docker exec -it a5028d60979f /bin/bash
[[email protected] /]# cat /etc/resolv.conf 

nameserver 8.8.8.8
nameserver 8.8.4.4
[[email protected] /]#

 

  • 结论

当宿主机resolv.conf文件不为空,容器启动命令中无resolv.conf文件的操作时,则容器默认使用宿主机的resolv.conf文件的内容

当宿主机resolv.conf文件为空,容器启动命令中无resolv.conf文件的操作时,则容器会添加8.8.8.8和8.8.4.4到resolv.conf文件中

 

  • 使用

  1. 修改宿主机resolv.conf文件,添加容器需要的内容(此方法仅使用于宿主机启动的容器均使用相同dns)

[[email protected] ~]# cat /etc/resolv.conf 
nameserver 1.1.1.1
nameserver 2.2.2.2
[[email protected] ~]# 

  2. 修改dockerfile文件,增加容器需要的dns到resolv.conf文件中

[[email protected] testDNS]# cat dockerfile 
from rhel:7.2
maintainer zcheck

add start.sh /tmp/
workdir /tmp
run chmod 777 start.sh

cmd /tmp/start.sh
[[email protected] testDNS]# cat start.sh 
#!/bin/bash

echo -e ‘nameserver 1.1.1.1‘ > /etc/resolv.conf
echo -e ‘nameserver 2.2.2.2‘ >> /etc/resolv.conf

while true;do
    echo ‘Hello‘
    sleep 2
done

 

文档资料

翻译:

关于DNS设置,在没有--dns=IP_ADDRESS...,--dns-search=DOMAIN...或--dns-opt=OPTION...选项时,docker会为每个容器创建和主机一样的/etc/resolv.conf文件(其中的docker守护进程运行)。当创建容器的/etc/resolv.conf,守护进程从主机的原始文件中过滤出所有本地主机IP地址条目。在过滤之后,如果nameserver容器/etc/resolv.conf文件中没有剩余条目,则守护进程将公共Google DNS名称服务器(8.8.8.8和8.8.4.4)添加到容器的DNS配置中,即写入/etc/resolv.conf文件中。如果守护程序启用了IPv6,则还会将添加公共IPv6 Google DNS名称服务器(2001:4860:4860 :: 8888和2001:4860:4860 :: 8844)。

 docker daemon会监视主机的DNS配置修改,当主机文件更改时,resolv.conf与主机匹配的所有停止的容器将立即更新为最新的主机配置。

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

 

以上是关于docker容器dns之resolv.conf的主要内容,如果未能解决你的问题,请参考以下文章

容器的DNS和主机名

Docker容器修改dns

宿主机改dns容器会生效吗

避免resolv.conf设置被覆盖

docker nginx-php容器镜像瘦身优化

/etc/resolv.conf服务器客户端DNS重要配置文件