Docker容器通信

本文介绍了Docker容器的通信方式,包括使用桥接、容器名称通信以及Docker内置DNS服务。详细讨论了本地和跨节点容器通信的实现,强调了容器间的DNS解析和NAT转换。还探讨了macvlan网络方案,作为一种高性能的跨主机容器网络选项,以及如何通过vlan子接口实现多网络隔离和连通。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

桥接口
Docker容器通信
容器之间除了使用ip通信外,还可以使用容器名称通信。
docker 1.10开始,内嵌了一个DNS server.
dns解析功能必须在自定义网络中使用。
启动容器时使用 --name 参数指定容器名称。
默认的桥接中不带解析。
容器之间的通信分为单节点上的容器互通和跨节点上的容器互通。
本地之间容器的通过桥接。
不同段的容器在互通的时候是直接走的桥接。数据包从容器内出来以后到达网关docker0,如果发现本机的流量都是同网段的话,还是走的是docker0。
不同网段的容器是隔离的,通过给容器增加一块网卡,进入到另外一个网络当中,使容器间互通。
容器间除了使用ip通信外,还可以使用容器名称通信。ip因为是动态的,所以不靠谱,一般使用docker 内嵌的DNS server来做域名解析。名称在启动docker时,添加–name 参数指定容器名称,施加就可以了,就会创建相应的解析记录。
随着容器的动态ip变更,就会变更dns中的解析记录。

server1
docker run -d --name vm1 --network my_net1 nginx #-d 打入后台
docker run -it --name vm2 --network my_net1 ubuntu
ping vm1

jined容器是一种较为特别的网络模式
在容器创建时使用–network=container:vm1指定。(vm1指定的是运行的容器名)

docker run -it --name vm1 --network my_net1 ubuntu
ip addr
docker ps -a
docker container prune 回收容器。
docker run -d --name nginx # -d打入后台
docker ps #显示当前正在运行的容器
brctl show #查看网桥 br0网桥不带解析
如果希望有解析记录的话,用自定义网络,就是自己创建的。默认的br虽然有桥接驱动,但是不带解析。默认的桥接不带解析。
docker network ls #
docker inspect demo #用于获取容器或镜像的元数据 可以查看ip地址
docker run --rm -it --network container:demo busybox
ip addr
busybox容器和之前打开的demo容器使用的是相同的ip,这两个容器监听的端口不能是重复的。
--link 可以用来连接2个容器
--link 的格式:
--link <name or id>:alias 容器加别名
name和id是源容器的name和id,alias是源容器在Link下的别名。
这个解析不是通过DNS,而是通过host文件。
server1
cat /etc/hosts
docker run --rm -it --link demo:webserver busybox
cat /etc/hosts
ping demo
env 变量
当demo的ip发生变化时,解析也会变,但变量不会变。

重新开一个终端
docker stop demo #停掉之前的demo
docker run -d --name demo2 nginx
docker inspect demo2 #发现这个demo2会把之前的ip地址给占了。
docker start demo 
docker inspect demo #又重新分配了一个地址。
接着上一个代码
cat /etc/hosts
env

容器能够出去,是完全依赖宿主机上面的nat,就是snat,创建多少虚拟网络,就会定制多少条策略。
进来是DNAT

server1
Docker容器之间可以通过多种方式进行通信。根据媒介,可以使用volume共享通信和网络通信等方式。根据通信范围,可以分为同主机通信和跨主机通信。其中,网络通信方法是本文的主要讨论内容。 Docker的网络驱动模型提供了不同的网络模式,其中最常用的是bridge模式。在bridge模式下,容器会创建独立的网络命名空间,具有独立的网卡和网络栈。这是Docker网络的默认设置。当我们通过docker run命令启动容器时,如果没有指定--net参数,就会默认采用bridge模式。系统会自动创建一个网桥docker0,新创建的容器会通过DHCP获取一个与docker0同网段的IP地址,并连接到docker0网桥,从而实现容器与宿主机的网络互通。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker容器间通信方法](https://blog.csdn.net/THMAIL/article/details/104081435)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Docker篇之docker容器之间的通信](https://blog.csdn.net/xu710263124/article/details/115587587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Docker容器间网络通信](https://blog.csdn.net/woshaguayi/article/details/119384333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值