--dns 参数可硬编码容器 dns 服务器,仅接受 ip 地址,按顺序写入 /etc/resolv.conf 并完全覆盖默认配置,但会被自定义网络、host 模式或容器内重写覆盖。
直接在 docker run 命令中用 --dns 参数指定 ip 地址,就能硬编码容器内的 dns 解析服务器。docker 会把传入的地址逐条写入容器 /etc/resolv.conf 的 nameserver 行,完全覆盖默认配置,不依赖宿主机 dns。
必须用 IP,不能用域名--dns 只接受 IPv4 或 IPv6 地址(如 192.168.1.100、2001:db8::1),不支持 dns.company.local 这类域名——否则启动失败或被忽略。
多 DNS 按顺序生效
系统按你传入的先后顺序写入 /etc/resolv.conf,前面的优先查询,超时或失败才 fallback 到下一个:
-
docker run --dns 192.168.10.5 --dns 114.114.114.114 nginx
→ 容器内/etc/resolv.conf内容为:nameserver 192.168.10.5 nameserver 114.114.114.114
搭配常用参数一起用没问题
可与 -p、-v、--network 等任意参数组合,互不冲突:
docker run -d -p 8080:80 --dns 10.20.30.40 --name myapp nginxdocker run -it --rm --dns 8.8.8.8 --dns 1.1.1.1 alpine nslookup google.com
注意覆盖风险
这个方式优先级最高,但以下情况会让 --dns 失效:
- 容器加入自定义网络(如
docker network create --dns 172.18.0.2 mynet),网络级 DNS 设置会覆盖容器级--dns - 容器内进程(如某些 Alpine 镜像里的 BusyBox)启动时主动重写
/etc/resolv.conf - 使用
--network=host模式,此时容器直接挂载宿主机/etc/resolv.conf,--dns被忽略
验证是否生效,进容器执行:
cat /etc/resolv.conf nslookup your-internal-service.corp











