Docker容器中dnsmasq的奇怪行为

我有一个运行dnsmasq容器的CoreOS实例。 目前, dnsmasqconfiguration只设置为logging所有查询并以debugging模式运行,所以应该只进行caching。

当我尝试从不同的容器中使用dignslookup或简单地运行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。