一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

带有 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 或临时运行服务。

  1. 支持多个 DNS 服务器,按顺序写入 resolv.conf,系统会依次尝试
  2. 优先级最高,会完全覆盖 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 转发

适合既要解析容器名(如 dbredis),又要解析公网或内网域名的编排场景。

  1. Docker 自定义网络自带 127.0.0.11 内嵌 DNS,负责服务发现
  2. 它本身不递归查公网,但可配置为将非本网络的查询转发给指定递归 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。

  1. 修改 /etc/docker/daemon.json,加入 dnsdns-searchdns-opts
  2. 保存后执行 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 会准确反映这些配置。

不复杂但容易忽略

热门栏目