Docker容器互联

简介:docker可以定义一个连接系统将多个容器都连接在一起,共享连接信息。docker链接会创建一个父子关系,其中父容器可以看到子容器的信息。

新建网络

使用命令docker network ls来查看当前已有的docker网络。
在这里插入图片描述
使用命令docker network create -d bridge <name>来创建一个新的docker网络。
在这里插入图片描述参数说明:

  • -d:指定docker网络类型,有bridge、overlay等

连接容器

1.创建一个容器testa并连接到新建的my-net网络。

1
docker run -itd --name testa --network my-net ubuntu /bin/bash

在这里插入图片描述2.创建一个容器 testb 加入到新建的 my-net 网络。

1
docker run -itd --name testb --network my-net ubuntu /bin/bash

在这里插入图片描述
3.通过 ping 来证明 testa 容器和 testb 容器建立了互联关系。
首先,需要在容器内安装ping命令

1
2
apt-get update # 读取所有源的软件列表,需要联网下载,作用是激活和更新源
apt install iputils-ping # 安装ping命令

在这里插入图片描述
在容器 testa 中 ping testb
在这里插入图片描述在容器 testb 中 ping testa
在这里插入图片描述

配置DNS

设置全部容器的DNS

可以在宿主机的/etc/docker/daemon.json文件中添加以下内容来设置全部容器的DNS。

1
2
3
4
5
6
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}

注:配置完需要重启docker服务(systemctl restart docker)才会生效,启动容器的DNS会自动配置为 114.114.114.114 和 8.8.8.8

示例:启动一个容器并查看该容器的DNS是否生效。

1
docker run -it --name testc ubuntu cat etc/resolv.conf

在这里插入图片描述

设置指定容器的DNS

1
docker run -it --rm -h my_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu

参数说明:

  • -h :设定容器的主机名,会被写入到容器内的 /etc/hostname 和 /etc/hosts。
  • –dns=ip_address:添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
  • –dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 test.com 时,在搜索一个名为 hostname 的主机时,DNS 不仅搜索 hostname,还会搜索 host.test.com。
    在这里插入图片描述

    注:如果容器启动时没有指定–dns和–dns-search,docker默认使用宿主机上/etc/resolv.conf来配置容器的DNS