Docker网络如何配置dns

 更新时间:2024年02月04日 10:40:01   作者:ghostwritten  
这篇文章主要介绍了Docker网络如何配置dns问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. docker配置DNS方法

docker容器配置dns解析地址,我知道的有以下几种办法(优先级从高到低):

  • 启动的时候加–dns=IP_ADDRESS;
  • 守护进程启动参数中添加DOCKER_OPTS=“–dns 8.8.8.8” ;
  • 在/etc/docker/deamon.json中添加dns信息(与守护进程参数会冲突不能同时添加。);
  • 使用宿主机的/etc/resolv.conf文件;

2. 默认DNS配置

怎样为Docker提供的每一个容器进行主机名和DNS配置,而不必建立自定义镜像并将主机名写 到里面?

它的诀窍是覆盖三个至关重要的在/etc下的容器内的虚拟文件,那几个文件可以写入 新的信息。

你可以在容器内部运行mount看到这个:

$ mount
...
/dev/disk/by-uuid/1fec...ebdf on /etc/hostname type ext4 ...
/dev/disk/by-uuid/1fec...ebdf on /etc/hosts type ext4 ...
/dev/disk/by-uuid/1fec...ebdf on /etc/resolv.conf type ext4 ...
...

3. 启动时配置dns参数

OptionsDescription
-h HOSTNAME or --hostname=HOSTNAME在该容器启动时,将HOSTNAME设置到容器内的/etc/hosts, /etc/hostname, /bin/bash提示中。
–link=CONTAINER_NAME or ID:ALIAS在该容器启动时,将ALIAS和CONTAINER_NAME/ID对应的容器IP添加到/etc/hosts. 如果 CONTAINER_NAME/ID有多个IP地址 ?
–dns=IP_ADDRESS…在该容器启动时,将nameserver IP_ADDRESS添加到容器内的/etc/resolv.conf中。可以配置多个。
–dns-search=DOMAIN…在该容器启动时,将DOMAIN添加到容器内/etc/resolv.conf的dns search列表中。可以配置多个。
–dns-opt=OPTION…在该容器启动时,将OPTION添加到容器内/etc/resolv.conf中的options选项中,可以配置多个

如果docker run时不含--dns=IP_ADDRESS…, --dns-search=DOMAIN…, or --dns-opt=OPTION…参数,docker daemon会将copy本主机的/etc/resolv.conf,然后对该copy进行处理(将那些/etc/resolv.conf中ping不通的nameserver项给抛弃),处理完成后留下的部分就作为该容器内部的/etc/resolv.conf。

因此,如果你想利用宿主机中的/etc/resolv.conf配置的nameserver进行域名解析,那么你需要宿主机中该dns service配置一个宿主机内容器能ping通的IP。

如果宿主机的/etc/resolv.conf内容发生改变,docker daemon有一个对应的file change notifier会watch到这一变化,然后根据容器状态采取对应的措施:

  • 如果容器状态为stopped,则立刻根据宿主机的/etc/resolv.conf内容更新容器内的/etc/resolv.conf.
  • 如果容器状态为running,则容器内的/etc/resolv.conf将不会改变,直到该容器状态变为stopped.
  • 如果容器启动后修改过容器内的/etc/resolv.conf,则不会对该容器进行处理,否则可能会丢失已经完成的修改,无论该容器为什么状态。
  • 如果容器启动时,用了–dns, --dns-search, or --dns-opt选项,其启动时已经修改了宿主机的/etc/resolv.conf过滤后的内容,因此docker daemon永远不会更新这种容器的/etc/resolv.conf。

注意:

docker daemon监控宿主机/etc/resolv.conf的这个file change notifier的实现是依赖linux内核的inotify特性,而inotfy特性不兼容overlay fs,因此使用overlay fs driver的docker deamon将无法使用该/etc/resolv.conf自动更新的功能。

 $ sudo docker run --hostname 'myhost' -it centos
 [root@myhost /]# cat /etc/hosts
 172.17.0.7    myhost

 $  sudo docker run -it --dns=192.168.5.1  centos
 [root@6a38049c9052 /]# cat /etc/resolv.conf
 nameserver 192.168.5.1

 $  sudo docker run -it --dns-search=www.domain.com  centos
 [root@ae0e9e99596f /]# cat /etc/resolv.conf
 nameserver 192.168.4.1
 search www.mydomain.com

4. daemon.json配置DNS格式

root@node-7:~# cat /etc/docker/daemon.json
{
  "data-root": "/data/docker",
  "dns": ["172.18.0.52", "172.18.0.70", "183.XX.XX.XX"],
  "dns-search": ["fiibeacon.local"],
  "hosts": ["unix:///var/run/docker.sock", "tcp://172.18.0.141:2375"],
  "storage-driver": "overlay2"
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker Compose 常用命令详解(最新推荐)

    Docker Compose 常用命令详解(最新推荐)

    Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具,本文将详细介绍 Docker Compose 的常用命令,帮助你高效地管理容器应用,感兴趣的朋友一起看看吧
    2025-04-04
  • 利用OpenVSwitch在多台主机上部署Docker的教程

    利用OpenVSwitch在多台主机上部署Docker的教程

    这篇文章主要介绍了利用OpenVSwitch在多台主机上部署Docker的教程,包括配置多个容器的IP地址等内容,需要的朋友可以参考下
    2015-03-03
  • 在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter

    在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter

    这篇文章主要介绍了在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • docker容器的四种端口映射演示分析

    docker容器的四种端口映射演示分析

    这篇文章主要为大家介绍了docker容器的四种端口映射演示分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 本地Docker部署Navidrome音乐服务器与远程访问听歌详细教程(图文详解)

    本地Docker部署Navidrome音乐服务器与远程访问听歌详细教程(图文详解)

    本文和大家分享一款目前在G站有11K+Star的开源跨平台音乐服务器 Navidrome,如何在 Linux 环境本地使用 Docker 部署,并结合cpolar 内网穿透工具配置公网地址,实现随时随地远程访问本地存储音乐的详细流程,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 如何在 Ubuntu 下通过 Docker 部署 Caddy 服务器

    如何在 Ubuntu 下通过 Docker 部署 Caddy 

    本文介绍了如何在Ubuntu系统下通过Docker部署Caddy服务器,首先安装Docker,然后启动Docker服务并设置为开机自启,接着拉取Caddy镜像,并创建一个Caddyfile配置文件,使用命令运行Caddy容器,并将本地的Caddyfile挂载到容器内,感兴趣的朋友跟随小编一起看看吧
    2025-03-03
  • docker容器资源配额控制详解

    docker容器资源配额控制详解

    本篇文章主要介绍了docker容器资源配额控制详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 如何使用 docker 搭建一个 mysql 服务

    如何使用 docker 搭建一个 mysql 服务

    这篇文章主要介绍了如何使用 docker 搭建一个mysql服务,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 阿里云系统安装docker的操作记录

    阿里云系统安装docker的操作记录

    这篇文章主要介绍了阿里云系统安装docker,阿里云里面的Redis镜像最新版也就到6.0,为了安装最新的7.2的redis 只能用本地window 安装DockerDesktop,然后安装最新的redis 把镜像导出来,再导入到云服务,需要的朋友可以参考下
    2024-07-07
  • 基于docker安装mariadb配置过程解析

    基于docker安装mariadb配置过程解析

    这篇文章主要介绍了基于docker安装mariadb配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10

最新评论