docker目前没有办法直接修改容器中的/etc/hosts文件,如果要修改就会报出权限不足的警告,对此引发了很多的讨论。目前来看,要想彻底解决这个问题,只有等官方未来的解决方案了,但是目前我们可以用dnsmasq来解决本地的解析问题。
以下示例在centos6的容器中来进行:
1. 安装dnsmasq
yum install dnsmasq
如果想要docker启动后dnsmasq自动启动,安装完成后可以将启动命令加入到/.bashrc文件中
echo “service dnsmasq start &>/dev/null “ >> /.bashrc
2. 配置dnsmasq
修改/etc/dnsmasq.conf文件:
vi /etc/dnsmasq.conf
添加以下两行:
listen-address=127.0.0.1
addn-hosts=/etc/dnsmasq.hosts
以上两行配置指定了dnsmasq监听本地的请求,并且使用/etc/dnsmasq.hosts文件作为附加的解析文件
3. 添加需要解析的域名
创建或修改文件/etc/dnsmasq.hosts,加入需要进行解析的域名,格式与hosts文件格式相同
4. 退出容器并保存容器的修改
5. 启动容器
在启动容器的时候,需要使用以下的命令,附加–dns参数来指定使用本地的dnsmasq进行解析,同时还要指定第二个dns服务器用于解析其他的域名:
docker run -t -i –dns=127.0.0.1 –dns=114.114.114.114 knktc/centos6 /bin/bash
此时在容器就可以使用本地设定的域名解析了,效果和使用hosts文件一样。
已知问题:
dnsmasq启动需要一定的时间,如果使用docker run命令直接指定容器启动后启动程序,则会出现部分解析失败的问题,此时需要在启动命令中加入一些sleep时间,例如
docker run -t -i –dns=127.0.0.1 –dns=114.114.114.114 knktc/centos6 /bin/bash -ic “sleep 5;python myapp.py”