我有一个运行 docker 容器的 CoreOS 实例,该容器运行 dnsmasq
.目前dnsmasq
配置仅设置为记录所有查询并在 Debug模式下运行,因此它应该只进行缓存。
当我尝试使用 dig
从不同的容器中使用它时, nslookup
,或者只是运行ping google.com
我回来了Bad hostname: google.com
我可以在日志查询中看到请求多次到来,就好像正在重试一样。
如果我尝试从运行 CoreOS 的主机上运行相同的命令,一次尝试就可以解决所有问题。
我的计划是运行 dnsmasq
在集群中的每台 CoreOS 机器上,并由 confd
支持,以便所有服务都可以解析相应的对口。
我将 Alpine linux 用于我的基本镜像,但我尝试在 Ubuntu 和 Debian 镜像中运行这些命令,结果相同。
最佳答案
正确的做法出现在以下线程 (Setting Up Docker Dnsmasq)
当暴露端口时,它应该明确绑定(bind)到主机的 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 正确解析。
https://stackoverflow.com/questions/36269944/