--dns-search用于为容器设置dns搜索域,使短名称(如db)自动补全为db.example.com等完整域名;支持多次使用添加多个域,但仅对当前容器实例有效,重启后丢失,且优先级高于docker-compose.yml中的dns_search配置。
用 --dns-search 可以为容器设置默认的域名搜索域,让短名称(比如 db 或 auth)自动补全为完整域名(如 db.internal 或 auth.svc.cluster.local),从而简化服务调用。
怎么用 --dns-search 启动容器
在 docker run 命令中直接添加 --dns-search 参数,支持多次使用添加多个搜索域:
- 单个域:
docker run --dns-search internal.net nginx - 多个域:
docker run --dns-search example.com --dns-search svc.cluster.local nginx
启动后进入容器执行 cat /etc/resolv.conf,能看到类似这一行:search example.com svc.cluster.local
它起什么作用
当应用发起 DNS 查询时(例如执行 curl db),系统会按顺序尝试拼接每个搜索域:
db.example.comdb.svc.cluster.local- 最后才查原始名称
db(如果ndots配置允许)
这对 Java、Go、Nginx、cURL 等多数工具都生效,无需改代码就能适配内网命名习惯。
需要注意的关键点
- 只对当前容器实例有效,
docker start重启后不会保留 - 不参与镜像构建(
Dockerfile中无效) - 若同时用了
docker-compose.yml的dns_search,运行时参数优先级更高,会覆盖配置文件中的值 - 不能和
network_mode: host共用——host 模式下所有 DNS 相关参数都被忽略
常见搭配用法
通常和 --dns 一起用,确保解析请求发给正确的 DNS 服务器:
docker run --dns 192.168.10.5 --dns-search dev.internal --dns-search svc.cluster.local nginx
这样既指定了权威内网 DNS,又设好了搜索路径,短名调用就能直连服务,不用写一长串完整域名。











