20.2 配置容器DNS和主机名
Docker支持自定义容器的主机名和DNS配置。
1.相关配置文件
实际上,容器中主机名和DNS配置信息都是通过三个系统配置文件来维护的:/etc/resolv.conf、/etc/hostname和/etc/hosts。
启动一个容器,在容器中使用mount命令可以看到这三个文件挂载信息:
- $ docker run -it ubuntu
- root@75dbd6685305:/# mount
- ...
- /dev/mapper/ubuntu--vg-root on /etc/resolv.conf type ext4 (rw,relatime,errors=
- remount-ro,data=ordered)
- /dev/mapper/ubuntu--vg-root on /etc/hostname type ext4 (rw,relatime,errors=
- remount-ro,data=ordered)
- /dev/mapper/ubuntu--vg-root on /etc/hosts type ext4 (rw,relatime,errors=remount-
- ro,data=ordered)
- ...
其中,/etc/resolv.conf文件在创建容器时候,默认会与宿主机/etc/resolv.conf文件内容保持一致:
- root@75dbd6685305:/# cat /etc/resolv.conf
- # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
- # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
- nameserver 8.8.8.8
- search my-docker-cloud.com
/etc/hosts文件中默认只记录了容器自身的一些地址和名称:
- root@75dbd6685305:/# cat /etc/hosts
- 172.17.0.2 75dbd6685305
- ::1 localhost ip6-localhost ip6-loopback
- fe00::0 ip6-localnet
- ff00::0 ip6-mcastprefix
- ff02::1 ip6-allnodes
- ff02::2 ip6-allrouters
- 127.0.0.1 localhost
- /etc/hostname文件则记录了容器的主机名。
- root@75dbd6685305:/# cat /etc/hostname
- 75dbd6685305
2.容器内修改配置文件
Docker 1.2.0开始支持在运行中的容器里直接编辑/etc/hosts,/etc/hostname和/etc/resolve.conf文件。
但是这些修改是临时的,只在运行的容器中保留,容器终止或重启后并不会被保存下来。也不会被docker commit提交。
3.通过参数指定
如果用户想要自定义容器的配置,可以在创建或启动容器时利用下面的参数指定:
·指定主机名-h HOSTNAME或者—hostname=HOSTNAME。设定容器的主机名,它会被写到容器内的/etc/hostname和/etc/hosts。但这个主机名只有容器内能看到,在容器外部则看不到,既不会在docker ps中显示,也不会在其他的容器的/etc/hosts看到。
·记录其他容器主机名—link=CONTAINER_NAME:ALIAS。选项会在创建容器的时候,添加一个所连接容器的主机名到容器内/etc/hosts文件中。这样,新创建容器可以直接使用主机名来与所连接容器通信。
·指定DNS服务器—dns=IP_ADDRESS。添加DNS服务器到容器的/etc/resolv.conf中,容器会用指定的服务器来解析所有不在/etc/hosts中的主机名。
·指定DNS搜索域—dns-search=DOMAIN。设定容器的搜索域,当设定搜索域为.example.com时,在搜索一个名为host的主机时,DNS不仅搜索host,还会搜索host.example.com。
