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/

原文地址:https://www.cnblogs.com/fengzi-2016/p/9267012.html

时间: 2024-08-01 22:43:54

docker容器dns之resolv.conf的相关文章

Docker容器学习梳理--小知识点补充

之前已经梳理了Docker的相关使用事项,这里再补充一些,以便加深掌握程度.1)docker run指令 [[email protected] ~]# docker run --help : docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container -a, --attach=[] Attach to STDIN, STDOUT or STDERR --add-host=[] Add a custo

Docker配置 DNS

Docker 没有为每个容器专门定制镜像,那么怎么自定义配置容器的主机名和 DNS 配置呢? 秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件. 在容器中使用 mount 命令可以看到挂载信息: $ mount ... /dev/disk/by-uuid/1fec...ebdf on /etc/hostname type ext4 ... /dev/disk/by-uuid/1fec...ebdf on /etc/hosts type ext4 ... tmpfs on /etc/re

Docker容器修改dns

在实际的开发过程中,可能会碰到以下的使用场景: 宿主机器可以正常的解析域名,但是容器里面无法解析域名,只能解析ip.碰到这种情况基本的思路有两个,一是从hosts文件下手,加入新的映射关系:一是从resolv.conf文件入手,也就是修改DNS服务器(如果是windows系统,则需要在网络配置里面手动输入DNS服务器地址). Docker修改DNS 如果用户是在Dockerfile里面修改/etc/resolv.conf./etc/hosts以及/etc/hostname文件,均不会生效.每一次

Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)

虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是NAT的上网方式默认是DHCP动态分配IP的,这意味着你每次重启虚拟机都 有不一样的IP地址,这对一般用户没任何问题.但是如果你的机子有特殊用处,比如作为服务器,需要IP地址信息,亦或者像我一样,作为一个云计算的节点, 其IP都是在配置文件里配置好的,如果每次重启系统都要跑过去修改下配置文件里的IP,那简直是不可取的做法,因此为虚拟机设置固定IP上网非常的有必 要! 设置固定IP的方法很多,大家都知道虚拟机上网有三种模式:brid

dns、网关、IP地址,主要是配置resolv.conf\network\ifcfg-eth0

centos网络配置实例 1,配置DNSvi /etc/resolv.conf加入: 复制代码 代码如下: nameserver 192.168.0.1 nameserver 8.8.8.8nameserver 8.8.4.4 2,配置网关: vi /etc/sysconfig/network加入:GATEWAY=192.168.0.1完整的如下: 复制代码 代码如下: NETWORKING=yesHOSTNAME=localhost.localdomainGATEWAY=192.168.0.1

linux 在/etc/resolv.conf配置dns,重启网卡之后消失问题

今天打开虚拟机启动网卡ping百度ping不通显示ping: unknown host baidu.com,肯定是dns问题. 打开resolv.conf发现上次配好的dns已经消失, 我又重新配置了一些nameserver重启网卡之后继续ping百度还是出现同样的错误.所以我再次查看resolv.conf发现nameserver又消失了. 在/etc/sysconfig/network-scrips/ifcfg-eth0里面配置DNS1和DNS2重启网卡之后发现这次dns不会消失. 后来bai

/etc/resolv.conf. 该文件是DNS域名解析的配置文件

该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数.resolv.conf的关键字主要有四个,分别是: nameserver   #定义DNS服务器的IP地址 domain       #定义本地域名 search       #定义域名的搜索列表 sortlist     #对返回的域名进行排序 /etc/resolv.conf的一个示例: domain ringkee.com search www.ringkee.com ringkee.com namese

[转载]Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)

虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是NAT的上 网方式默认是DHCP动态分配IP的,这意味着你每次重启虚拟机都 有不一样的IP地址,这对一般用户没任何问题.但是如果你的机子有特殊用处,比如作为服务器,需要IP地址信息,亦或者像我一样,作为一个云计算的节点, 其IP都是在配置文件里配置好的,如果每次重启系统都要跑过去修改下配置文件里的IP,那简直是不可取的做法,因此为虚拟机设置固定IP上网非常的有必 要! 设置固定IP的方法很多,大家都知道虚拟机上网有三种模式:bri

DNS 访问 Service - 每天5分钟玩转 Docker 容器技术(138)

在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问. kubeadm 部署时会默认安装 kube-dns 组件. kube-dns 是一个 DNS 服务器.每当有新的 Service 被创建,kube-dns 会添加该 Service 的 DNS 记录.Cluster 中的 Pod 可以通过 <SERVICE_NAME>.<NAMESPACE_NAME> 访问 Service. 比如可以用 htt