Docker 容器的DNS

这篇具有很好参考价值的文章主要介绍了Docker 容器的DNS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.简介

DNS服务是域名系统的缩写, 英文全称:Domain Name System,将域名和IP地址相互映射。在容器环境中,DNS至关重要,

Docker link

Docker link是一个遗留的特性,在新版本的Docker中,一般不推荐使用。简单来说Docker link就是把两个容器连接起来,容器可以使用容器名进行通信,而不需要依赖ip地址(其实就是在容器的/etc/hosts文件添加了host记录,原本容器之间的IP就是通的,只是我们增加了host记录,可以不用IP去访问)

创建容器centos-1:

[root@host1 ~]# docker run -itd --name centos-1  registry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v2

创建容器centos-2,使用--link name:alias,name就是要访问的目标机器,alias就是自定义的别名。

[root@host1 ~]# docker run -itd --name centos-2  --link centos-1:centos-1-alias  registry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v2

查看容器centos-2的/etc/hosts文件:

[root@host1 ~]# docker exec centos-2 cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2      centos-1-alias 9dde6339057a centos-1  #容器centos-1的host记录
172.18.0.3      f1a7e5fa3d96  #容器centos-2自身的host记录

意味着centos-2可以用centos-1-alias,9dde6339057a,centos-1来访问原先创建的容器。centos-1是不可以通过hostname访问centos-2的。

[root@host1 ~]# docker exec centos-2 ping centos-1-alias
PING centos-1-alias (172.18.0.2) 56(84) bytes of data.
64 bytes from centos-1-alias (172.18.0.2): icmp_seq=1 ttl=64 time=0.174 ms
^C
[root@host1 ~]# docker exec centos-2 ping centos-1
PING centos-1-alias (172.18.0.2) 56(84) bytes of data.
64 bytes from centos-1-alias (172.18.0.2): icmp_seq=1 ttl=64 time=1.37 ms
64 bytes from centos-1-alias (172.18.0.2): icmp_seq=2 ttl=64 time=0.523 ms
^C
[root@host1 ~]# docker exec centos-2 ping 9dde6339057a
PING centos-1-alias (172.18.0.2) 56(84) bytes of data.
64 bytes from centos-1-alias (172.18.0.2): icmp_seq=1 ttl=64 time=2.59 ms
64 bytes from centos-1-alias (172.18.0.2): icmp_seq=2 ttl=64 time=3.75 ms

Embedded DNS

从Docker 1.10开始,Docker提供了一个内置的DNS服务器,当创建的容器属于自定义网络时,容器的/etc/resolv.conf会使用内置的DNS服务器(地址永远是127.0.0.11)来解析相同自定义网络内的其他容器。

docker dns,docker,docker,容器,运维

为了向后兼容,default bridge网络的DNS配置没有改变,默认的docker网络使用的是宿主机的/etc/resolv.conf的配置。

创建一个自定义网络:

[root@host1 ~]# docker network create my-network

#bridge,host,none为docker默认创建的网络
[root@host1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2115f17cd9d0        bridge              bridge              local
19accfa096cf        host                host                local
a23c8b371c7f        my-network          bridge              local
0a33edc20fae        none                null                local

分别创建两个容器属于自定义网络my-network中:

[root@host1 ~]# docker run -itd --name centos-3 --net my-network  registry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v2 
[root@host1 ~]# docker run -itd --name centos-4 --net my-network  registry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v2  

查看容器centos-4的/etc/hosts和/etc/resolv.conf,可以看到nameserver添加的IP为127.0.0.11的Embedded DNS:

#/etc/hosts中没有配置对方的host记录
[root@host1 ~]# docker exec centos-4 cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.19.0.3      555281f37ea3

#/etc/resolv.conf配置了dns服务器127.0.0.11
[root@host1 ~]# docker exec centos-4 cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

此时centos-3和centos-4可以互相解析:

[root@host1 ~]# docker exec centos-4 ping centos-3
PING centos-3 (172.19.0.2) 56(84) bytes of data.
64 bytes from centos-3.my-network (172.19.0.2): icmp_seq=1 ttl=64 time=0.128 ms
64 bytes from centos-3.my-network (172.19.0.2): icmp_seq=2 ttl=64 time=0.078 ms
64 bytes from centos-3.my-network (172.19.0.2): icmp_seq=3 ttl=64 time=0.103 ms
^C

[root@host1 ~]# docker exec centos-3 ping centos-4
PING centos-4 (172.19.0.3) 56(84) bytes of data.
64 bytes from centos-4.my-network (172.19.0.3): icmp_seq=1 ttl=64 time=0.087 ms
64 bytes from centos-4.my-network (172.19.0.3): icmp_seq=2 ttl=64 time=0.101 ms
64 bytes from centos-4.my-network (172.19.0.3): icmp_seq=3 ttl=64 time=0.076 ms
^C

Docker DNS配置

方式一:docker run (针对单个容器)
Flag Description
--dns 指定DNS服务器地址,如果容器不能访问指定的所有ip地址,则会使用8.8.8.8作为DNS服务器地址(Docker默认定义的)
--dns-search 当容器访问一个不包括完全域名的主机名时,在该主机名后面添加dns-search指定的域名后缀,例如容器访问centos-1,dns-search配置的是example.com,则会解析成centos-1.example.com
--dns-opt options ndots:5的含义是当查询的域名字符串内的点字符数量大于等于ndots值(5)时,则认为是完整域名,直接解析,不会走 search 域
--hostname 指定容器hostname
方式二:daemon.json

nameserver只针对docker默认网络所有容器,dns-search和dns-opts针对所有网络容器。

{
     "dns": ["114.114.114.114","223.5.5.5"],
     "dns-opts":["ndots:5"],
     "dns-search":["example.com"]
} 

Kubernetes DNS

docker dns,docker,docker,容器,运维

在kubernetes中,有以下4中DNS策略,可以通过dnsPolicy指定:文章来源地址https://www.toymoban.com/news/detail-791018.html

到了这里,关于Docker 容器的DNS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S自动化运维容器化(Docker)集群程序

    1.什么是K8S K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container Schedul

    2024年02月10日
    浏览(69)
  • K8S:K8S自动化运维容器Docker集群

    (1)K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 (2)版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 (3)官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container S

    2024年02月10日
    浏览(82)
  • K8S:K8S自动化运维容器化(Docker)集群程序

    目录 一、K8S概述 1、什么是K8S 2、为什么要用K8S 3、作用及功能 二、K8S的特性 1、弹性伸缩 2、自我修复 3、服务发现和复制均衡 5、自动发布和回滚 6、集中化配置管理和秘钥管理 7、存储编排 8、任务批量处理运行 三、K8S的集群架构 四、K8S的核心组件 1、Master组件 ①Kube-apis

    2024年02月12日
    浏览(70)
  • 小白到运维工程师自学之路 第六十二集 (docker持久化与数据卷容器)

    一、概述 Docker持久化是指将容器中的数据持久保存在主机上,以便在容器重新启动或迁移时不丢失数据。由于Docker容器是临时和可变的,它们的文件系统默认是易失的,这意味着容器中的任何更改或创建的文件都只存在于此容器的生命周期内。但是,在许多场景中,我们希望

    2024年02月14日
    浏览(39)
  • 【Docker、运维】如何卸载docker

    卸载Docker的方法取决于你的操作系统。以下是在一些常见操作系统中卸载Docker的指导。确保在执行这些步骤之前,备份任何重要数据,包括Docker容器和镜像,以防万一需要以后恢复。这些步骤将彻底卸载Docker并清除与之相关的大部分数据和配置文件。  1、停止Docker服务 (如

    2024年03月26日
    浏览(58)
  • [运维|docker] docker 查看日志

    要查看Docker容器的日志,可以使用以下命令: 首先,使用以下命令列出正在运行的容器: 找到要查看日志的容器的名称或ID。 使用以下命令查看容器的日志: 例如,要查看名为mycontainer的容器的日志: 默认情况下,这将显示容器的最近日志输出。如果要实时查看日志,可以

    2024年02月15日
    浏览(45)
  • Docker 设置 DNS

    DNS 解析和默认网关不同,用比喻来说网关属于套娃模式,当容器对外访问网络时,会经过宿主机。但是 DNS 可以理解为客户端端点模式,你宿主机配置了 DNS 并不能使你 Docker 容器就默认可以解析了。所以要想 Docker 容器可以正常的通过域名访问,需要为容器也设置具体的 DN

    2024年02月11日
    浏览(26)
  • [运维|docker] docker 清理指定存储

    要清理Docker中的指定存储,你可以执行以下步骤: 确定要清理的存储类型。Docker有以下几种存储类型: 容器卷(Container Volumes) 匿名卷(Anonymous Volumes) 本地卷(Local Volumes) 数据卷容器(Data Volume Containers) 使用以下命令查看相应类型的存储列表: 容器卷: 匿名卷: 本地

    2024年02月15日
    浏览(84)
  • 【Docker】Docker-Compose内置DNS负载均衡失效问题

    还是对前面的例子 docker-compose.yml 稍微修改: 主要是修改 flask-demo 启动3个容器。 nginx.conf 文件的内容如下: 启动服务: 访问服务: 从运行结果可以发现我们可以根据service的名称访问容器,Docker会使用内置的DNS服务器将service的名称解析成IP,如果service对应的容器有多个,

    2024年02月08日
    浏览(32)
  • Docker运维篇

    https://blog.csdn.net/qq_42533216/article/details/113518716 云服务器使用如下命令: linux其他服务相关命令介绍: 1、linux显示所有服务的运行状态命令 2、linux查看单个服务的运行状态命令 3、linux查看服务启动状态,是否开机自动启动命令 常见错误汇总 centos 7 Docker容器启动报WARNING: IPv4

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包