2

我有一个运行 docker 容器的 CoreOS 实例,该容器运行dnsmasq. 目前dnsmasq配置只设置为记录所有查询并在调试模式下运行,所以它应该只做缓存。

当我尝试从不同的容器中使用dig,nslookup或简单地运行时,ping google.com我会返回Bad hostname: google.com,并且我可以在日志查询中看到请求多次进入,就好像正在重试一样。

如果我尝试从运行 CoreOS 的主机上运行相同的命令,一次尝试就可以解决所有问题。

我的计划是dnsmasq在集群中的每台 CoreOS 机器上运行 ,并让它支持confd,以便所有服务都可以解析适当的对应物。

我将 Alpine linux 用于我的基本映像,但我尝试在 Ubuntu 和 Debian 映像中运行这些命令,结果相同。

4

1 回答 1

0

正确的做法出现在以下线程中(设置 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 正确解析。

于 2016-03-30T02:41:54.850 回答