控制容器的解析行为
容器启动时由守护进程生成 /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 命令都要重复参数的负担。