docker容器dns配置有四种方式:一是启动时用--dns指定,优先级最高;二是修改daemon.json全局配置;三是自定义网络启用内嵌dns实现服务发现;四是compose中声明dns字段。

Docker容器默认使用宿主机的DNS配置,但很多场景下需要自定义DNS服务器来解决内网域名解析、私有服务发现或绕过公网DNS限制等问题。配置方式取决于你的网络模型和需求复杂度,核心思路是让容器的/etc/resolv.conf中写入你指定的nameserver。
直接启动时指定DNS(最常用)
适用于单次运行或CI/CD临时调试。使用`--dns`参数传入一个或多个DNS服务器地址:docker run --dns 114.114.114.114 --dns 8.8.8.8 -it alpine nslookup baidu.com
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
为整个Docker守护进程统一配置
适合所有容器默认走特定DNS(比如公司内网DNS)。修改`/etc/docker/daemon.json`:{ "dns": ["192.168.1.1", "114.114.114.114"], "dns-search": ["corp.local"], "dns-opts": ["ndots:2"] }
保存后重启Docker服务(sudo systemctl restart docker)。此后新建容器都会自动继承这些设置,且仍可被单个容器的`--dns`覆盖。在用户自定义网络中启用内嵌DNS(推荐用于服务发现)
当你用`docker network create mynet`创建自定义网络时,Docker会自动启用内嵌DNS服务器(固定地址`127.0.0.11`),它能解析同网络内容器的名称和`--network-alias`别名:docker network create mynet
docker run -d --name web --network mynet nginx
docker run -it --network mynet --rm alpine nslookup web
Docker Compose中声明DNS(适合编排环境)
在`docker-compose.yml`的服务层级添加`dns`、`dns_search`或`dns_opt`字段:services:
app:
image: ubuntu
dns:
- 192.168.10.50
- 8.8.8.8
dns_search:
- internal.example.com
dns_opt:
- timeout:2
不复杂但容易忽略










