首页/云/Docker 容器速查/容器 DNS 参数 --dns / --dns-search 配置
网络与存储52 条

容器 DNS 参数 --dns / --dns-search 配置

自定义容器的 DNS 上游服务器与搜索域:隧道、内网域名环境下需要显式指定 DNS,否则新环境里域名解析会异常。

Docker 容器速查云更新于 2026-10-13

控制容器的解析行为

容器启动时由守护进程生成 /etc/resolv.conf,内容来自宿主或显式参数。--dns 指定上游服务器,--dns-search 追加搜索域,--dns-opt 传递解析选项(超时、重试次数等)。这些都是启动参数,容器内直接改文件在重建后就失效;需要统一口径时把默认值写进守护进程配置。注意 --dns 影响的是外部域名向谁转发,自定义网络内的容器名与别名仍由内嵌 DNS 解析。

基本信息

启动参数--dns IP / --dns-search 域 / --dns-opt 选项
全局默认daemon.json 的 dns、dns-search、dns-opts 字段
查看结果docker exec 容器 cat /etc/resolv.conf
作用范围仅影响外部域名解析,容器名解析不受影响

典型使用场景

  • 内网域名解析:把上游指向内网 DNS 服务器
  • 短名访问:用搜索域补全后缀,配置里只写主机名
  • 解析超时优化:上游响应慢时设置更短的超时与合理的重试次数
  • 多环境差异:开发与生产使用不同 DNS,通过环境变量注入参数
  • 隧道与专线环境:宿主与容器解析链路不一致时需要显式指定

参数使用与核对

参数使用与核对
# 指定两个上游 DNS
docker run -d --dns 10.0.0.53 --dns 10.0.0.54 --name api app/api:1.4.2

# 追加搜索域并调整超时与重试
docker run --rm --dns-search internal.example.com --dns-opt timeout:2 --dns-opt attempts:3 alpine nslookup db.internal.example.com

# 核对容器实际使用的配置
docker exec api cat /etc/resolv.conf

参数与适用场景

参数作用适用场景
--dns 10.0.0.53指定上游解析服务器内网域名与集中管控的解析需求
--dns-search 域短名自动补全后缀配置里只写主机名,减少硬编码
--dns-opt timeout:2设定单次查询超时上游响应偏慢时避免长时间等待
--dns-opt attempts:3设定查询重试次数多上游环境下提高成功率
在自定义网络里,--dns 与内嵌 DNS 是两条路径:容器名与网络别名走内嵌解析,外部域名转发给 --dns 指定的上游。
把参数写进守护进程配置能让所有容器继承统一口径,减少每个 run 命令都要重复参数的负担。

易错点

  • 在容器里手改 resolv.conf:容器重建即失效,改动要通过启动参数或守护进程配置落地
  • 内网与公共 DNS 混用:同一域名在不同上游解析结果不一致,按要求固定上游范围
  • 忽略搜索域带来的歧义:短名会按搜索域顺序拼接,可能解析到意料之外的主机
  • 把 DNS 问题当网络问题:解析失败与连接失败的现象相似,先用 getent 或 nslookup 分清层次

数据来源与参考

  • Docker 官方 CLI 参考:docker run 的 --dns 系列参数(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌