配置容器中的 DNS 选项

您可以在容器服务的编排模板中通过指定 dnsdns_options 来指定容器的 DNS 服务器和 DNS 的选项。

比如:

testdns:
  image: nginx
  dns:
    - '8.8.8.8'
    - '8.8.4.4'
  dns_options:
    - use-vc
    - no-tld-query

上面的示例配置了服务的容器的 DNS 服务器和 DNS 的查询选项。

说明 为了进行服务发现,Docker 在每个容器中内置了 DNS 服务器。您在容器中看到的 /etc/resolv.conf 文件中的 DNS 服务器是 Docker 的内置 DNS 服务器 127.0.0.11。Docker 会监听内置服务器的 DNS 请求,并将 DNS 请求转发到通过 dns 配置的服务器上。

优化 DNS 解析

在请求域名时,DNS 解析可能会超时或者失败导致网站无法访问。操作系统上一般会启用 nscd 服务用于做 DNS 的缓存以便避免 DNS 解析失败。但容器的镜像中一般不会配置 nscd 服务,您可以在经常做 DNS 解析的容器上安装 nscd 服务来优化容器中的 DNS 解析。

您需要首先安装 nscd 软件包,然后在容器启动的时候首先启动 nscd 服务,再启动自己的进程。

FROM registry.aliyuncs.com/acs/ubuntu
RUN apt-get update && apt-get install -y nscd && rm -rf /var/lib/apt/lists/*
CMD service nscd start; bash