操作系统 CentOS Linux release 7.2.1511 (Core)
Docker版本 Server Version: 1.9.1
拉取基础镜像
Rhel:7.2 为直接从docker HUb中pull下来的镜像
场景1
主机配置文件
[root docker-01 ~]# cat /etc/resolv.conf # Generated by NetworkManagersearch localdomainnameserver 192.168.1.2
启动容器
[root docker-01 ~]# docker exec -it a5028d60979f /bin/bash[root a5028d60979f /]# cat /etc/resolv.conf # Generated by NetworkManagersearch localdomainnameserver 192.168.1.2[root a5028d60979f /]#
场景2
主机配置文件
[root docker-01 ~]# cat /etc/resolv.conf [root docker-01 ~]#
启动容器
[root docker-01 ~]# docker exec -it a5028d60979f /bin/bash[root a5028d60979f /]# cat /etc/resolv.conf nameserver 8.8.8.8nameserver 8.8.4.4[root a5028d60979f /]#
结论
当宿主机resolv.conf文件不为空 容器启动命令中无resolv.conf文件的操作时 则容器默认使用宿主机的resolv.conf文件的内容
当宿主机resolv.conf文件为空 容器启动命令中无resolv.conf文件的操作时 则容器会添加8.8.8.8和8.8.4.4到resolv.conf文件中
使用
1. 修改宿主机resolv.conf文件 添加容器需要的内容 此方法仅使用于宿主机启动的容器均使用相同dns
[root docker-01 ~]# cat /etc/resolv.conf nameserver 1.1.1.1nameserver 2.2.2.2[root docker-01 ~]#
2. 修改dockerfile文件 增加容器需要的dns到resolv.conf文件中
[root docker-01 testDNS]# cat dockerfile from rhel:7.2maintainer zcheckadd start.sh /tmp/workdir /tmprun chmod 777 start.shcmd /tmp/start.sh[root docker-01 testDNS]# cat start.sh #!/bin/bashecho -e nameserver 1.1.1.1 /etc/resolv.confecho -e nameserver 2.2.2.2 /etc/resolv.confwhile true;do echo Hello sleep 2done
文档资料
翻译
关于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/
转载于:https://www.cnblogs.com/fengzi-2016/p/9267012.html
点赞 评论本文链接: http://resolvan.immuno-online.com/view-754060.html