docker - dnsmasq 跨 docker 容器的奇怪行为

我有一个运行 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/

相关文章:

docker - Ansible Docker 连接错误

docker - Godep无法在Docker容器中工作

apache - 如何在docker中以标准方式停止solr

docker - 由 Docker 复制的文件被视为目录

docker - Docker Compose YAML版本1和版本2有什么区别?

jenkins - 使用具有马拉松和Mesos的持久卷在docker内部运行jenkins的权限错误

azure - 通过远程 api 设置 Docker Volume Driver 选择

postgresql - 使用Docker容器和主机LAN的Postgres网络

docker - 将 git 命令的结果存储在 ENV 中

docker - Docker yum安装问题-无法为存储库检索metalink:epel/x86_