Docker容器中dnsmasq的奇怪行为
我有一个运行dnsmasq
容器的CoreOS实例。 目前, dnsmasq
configuration只设置为logging所有查询并以debugging模式运行,所以应该只进行caching。
当我尝试从不同的容器中使用dig
, nslookup
或简单地运行ping google.com
我得到了Bad hostname: google.com
,我可以看到在日志查询中,多次请求,好像是重试。
如果我尝试从运行CoreOS的主机上运行相同的命令,那么在单次尝试中一切都没有问题。
我的计划是在群集中的每个CoreOS机器上运行dnsmasq
,并使其由confd
支持,这样所有的服务都可以解决相应的问题。
我使用Alpine Linux作为基础映像,但是我试图在Ubuntu和Debian映像中运行这些命令,结果相同。
正确的做法是在下面的线程( 设置Docker Dnsmasq )
当暴露端口时,它应该明确地绑定到主机的IP地址(在我们的情况下是内部的)。
容器的调用看起来像这样:
source /etc/environment docker run -d --cap-add NET_ADMIN \ -p "$COREOS_PRIVATE_IPV4:53:53" \ -p "$COREOS_PRIVATE_IPV4:53:53/udp" \ -e COREOS_PRIVATE_IPV4="$COREOS_PRIVATE_IPV4"\ someorg/dnsmasq
然后,所有使用--dns "$COREOS_PRIVATE_IPV4"
运行的容器都可以通过机器级别的dnsmasq正确parsing。