dns - Docker 守护进程和 DNS

标签 dns docker

我试图强制 docker 守护进程使用我绑定(bind)到 bridge0 接口(interface)的 DNS 服务器。 我在我的 docker_opts 中添加了 --dns 172.17.42.1 但没有成功

DNS 服务器用 dig 命令回复 ok:

dig @172.17.42.1 registry.service.consul SRV +short
1 1 5000 registry2.node.staging.consul.

但是使用这个域拉取失败:

docker pull registry.service.consul:5000/test
FATA[0000] Error: issecure: could not resolve "registry.service.consul": lookup registry.service.consul: no such host

PS:通过在我的/etc/resolv.conf 中添加名称服务器 172.17.42.1 可以解决问题,但 DNS 必须专门用于 docker 命令。

有什么想法吗?

最佳答案

您将 --dns 172.17.42.1 传递给了 docker_opts,因此您应该能够从其他容器内部解析容器主机名。 但是显然您是从主机而不是容器执行docker pull,不是吗?因此,您无法从主机解析容器的主机名也就不足为奇了,因为它未配置为使用 172.17.42.1 进行解析。

我在这里看到两种可能的解决方案:

  1. 强制您的主机使用 172.17.42.1 作为 DNS(/etc/resolv.conf 等)。
  2. 创建一个带有Docker客户端的特殊容器,并在其中挂载docker.sock。这将使您能够使用所有客户端命令,包括 pull:

    docker run -d -v/var/run/docker.sock:/var/run/docker.sock:rw --name=client ...

    docker exec -it client docker pull registry.service.consul:5000/test

关于dns - Docker 守护进程和 DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607761/

相关文章:

email - 来自没有 MX 记录的子域的 Mailgun 邮件被某些邮件提供商拒绝

linux - 在 Ubuntu 上为单个本地主机配置 DNS 服务器 (bind9)

django - 使用 Traefik 时如何使用 Nginx 和 Django Gunicorn 提供静态内容

docker - Docker中的Nightwatch- Selenium 服务器找不到chromedriver

c - 将要存储在 int 中的左移 short 是 UNDEFINED 吗?

dns - CNAME 记录是否公开

docker - 我们在哪里可以定义要用于Docker的存储库?

Docker 服务启动失败

node.js - 如何在node js中获取docker的环境变量?

java - 将 www 保留在 url 中以匹配仅 tomcat 环境中的证书域