最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
带有 DNS 配置的 Docker 容器如何创建
时间:2026-09-04 09:48:49 编辑:袖梨 来源:一聚教程网
直接创建带DNS配置的Docker容器需确保/etc/resolv.conf写入指定nameserver且该服务器支持递归查询,四种方式:1.启动时用--dns指定(优先级最高);2.自定义网络中让127.0.0.11转发至递归DNS;3.全局配置daemon.json;4.Compose中通过dns键声明。
直接创建带 DNS 配置的 Docker 容器,核心是让容器启动时的 /etc/resolv.conf 中写入你指定的 nameserver,且该服务器支持递归查询。有四种主流方式,按使用频率和适用场景分:
启动单个容器时用 --dns 参数
这是最常用、最直接的方式,适合调试、CI/CD 或临时运行服务。
- 支持多个 DNS 服务器,按顺序写入 resolv.conf,系统会依次尝试
- 优先级最高,会完全覆盖 daemon.json 和自定义网络的 DNS 设置
docker run --dns 192.168.10.50 --dns 114.114.114.114 -it alpine nslookup example.com
注意:确保 192.168.10.50 是一台能对外递归查询的 DNS(如 dnsmasq、CoreDNS),否则解析会失败或超时。
用自定义网络 + 内嵌 DNS 转发
适合既要解析容器名(如 db、redis),又要解析公网或内网域名的编排场景。
- Docker 自定义网络自带
127.0.0.11内嵌 DNS,负责服务发现 - 它本身不递归查公网,但可配置为将非本网络的查询转发给指定递归 DNS
docker network create --dns 192.168.10.50 mynetdocker run --network mynet --name web -d nginx
此时容器 resolv.conf 显示 nameserver 127.0.0.11,而 127.0.0.11 会把 baidu.com 这类请求转发给 192.168.10.50。
全局配置 daemon.json(所有新容器默认生效)
适合统一运维策略,比如公司所有容器必须走内网 DNS。
- 修改
/etc/docker/daemon.json,加入dns、dns-search、dns-opts - 保存后执行
sudo systemctl restart docker
示例配置:
{"dns": ["192.168.1.1", "8.8.8.8"],"dns-search": ["corp.local"],"dns-opts": ["timeout:2", "attempts:3"]}
已运行的容器不受影响;个别容器仍可用 --dns 覆盖此设置。
Docker Compose 中声明 dns 字段
适合项目级编排,行为与 docker run --dns 一致,配置清晰、可版本化。
在 docker-compose.yml 的服务下添加:
services:app:image: ubuntu:22.04dns:- 192.168.10.50- 1.1.1.1dns_search:- internal.example.comdns_opt:- timeout:2
启动后,容器内 /etc/resolv.conf 会准确反映这些配置。
不复杂但容易忽略