Docker网络---容器互联

article/2025/9/13 18:43:34

前言:

虽然每个docker容器之间都能通过ip来进行互联,但当容器重新启动,ip就会被重新分配给重新启动的容器,这时同个容器由于重启导致ip不一样了,这时就会导致开发和运维的困难程度大大增加,这时候就要考虑能不能不通过ip互联,而是通过容器的名称或id来实现容器的互联呢?这样的话即使docker容器重启了,我们也能通过固定的容器名称来实现容器互联,而不再是通过变动的ip来实现容器互联。

1、Docker网络基础结构及原理

每启动一个docker容器,docker就会给每个docker容器分配一个ip(通过子网掩码把主机的ip划分成多个子网,把多个子网分配给多个docker容器,所以所有容器和主机都处于同一个网段下),docker安装后就会有一个名为docker0的网桥,docker0的默认网络模式是(bridge)桥接模式,docker容器之间的连接都通过Linux的虚拟网络技术---虚拟网线(veth-pair)来进行连接的,当容器停止或删除,对应的虚拟网线就会被收回。

2、使用参数--link实现docker容器互联(注意!!!docker容器之间能通过ip来进行互联,这里的容器互联是指通过容器id或容器名来进行容器间互联

(1)普通的docker容器之间使用容器名称互ping,结果是ping不通的

操作过程图:

(2)使用--link参数,让centos03连接centos2

例:

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--link表示让centos03链接到centos02docker run -itd -P --name centos03 --link centos02 centos:7 /bin/bash

让容器centos03 ping centos02能ping通

操作过程图:

反过来让容器centos02 ping centos03结果发现不能ping通

操作过程图:

使用以下命令查看容器的元数据(容器的所有信息)li

docker inspect 容器id或容器名称

例:

docker inspect centos03

使用上述命令后可以在centos03的元数据里查看到关于link的信息并说明了容器centos02和centos03之间存在网络下的关联关系

(3)--link的原理

使用下面命令查看容器的hosts文件

docker exec -it 容器id或容器名称 cat /etc/hosts

例:

docker exec -it centos03 cat /etc/hosts

由下图可知--link能实现容器间通过容器id或容器名称来进行互联的原因是--link通过改变hosts文件来实现容器ip和容器名称、容器id的映射,从而使centos03容器直接ping centos02的容器名时能通过hosts文件映射的方式,直接ping通centos02容器

效果图:

从上述操作得知使用参数--link虽然能实现容器间通过容器id或名称进行互联,但还是有很大的局限性,所以需要使用接下来的自定义网络来实现容器间的互联

3、自定义Docker网络

(1)Docker的网络模式

#桥接(容器的默认网络模式,不支持通过容器id或容器名称来进行容器互联,虽然能通过使用--link来进行容器互联,但通过--link来实现容器互联不方便)
bridge#不配置网络
none#和宿主机共享网络
host#容器网络互联(局限性很大,使用得少)
container 

(2)指定网络模式来启动容器

例:

而通过--net bridge指定容器的网络模式来启动的容器,该容器的docker0的网络模式就是bridge模式

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--net表示使用指定的网络来启动容器docker run -d -P --name centos01 --net bridge centos:7

效果图: 


注意:因为bridge为容器的默认网络模式,所以平常启动容器不指定网络模式时,容器的网络模式会默认使用bridge模式,所以以下两条启动容器的命令是等价的

docker run -d -P --name centos01 centos:7
docker run -d -P --name centos01 --net bridge centos:7

(3)使用以下命令自定义Docker网络

#选项及解释
--driver表示指定自定义网络的网络模式(bridge表示网络模式是桥接模式)
--subnet表示配置子网(/16是子网掩码中网络地址位数(0-32),网络地址位数是16的子网掩码为255.255.0.0,通过子网掩码能配置出65025(255×255)个ip地址)
--gateway表示设置网关
mynet表示该自定义网络的名称docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

效果图: 

(4)使用以下命令查看docker的所有网络 

docker network ls

效果图: 

(5)使用以下命令查看刚刚创建的网络的元数据

docker network inspect 自定义的网络名称

例:

docker network inspect mynet

效果图: 

 

(6)用创建的自定义网络去创建新的docker容器并让容器通过容器名来互ping,发现两容器之间能互相ping通

例:

#选项及解释
--itd表示容器后台启动
-P表示随机指定端口
--name="name"参数用于给容器取名字 ,用来区分容器
--net表示使用指定的网络来启动容器docker run -itd -P --name centos-mynet-01 --net mynet centos:7 /bin/bash
docker run -itd -P --name centos-mynet-02 --net mynet centos:7 /bin/bash

操作过程图: 

(7)再次使用以下命令查看刚刚创建的网络的元数据,发现名为mynet的自定义网络下多出两个容器

docker network inspect 自定义的网络名称

例:

docker network inspect mynet

效果图: 

4、网络连通

在实际开发里我们可能会创建不同的集群,例如redis集群和mysql集群,而为了集群的安全和健康的,我们创建集群的时候给集群分配的网段是不同的,但这时候我们希望两个不在同一个网段下的集群间能互相连通,所以需要用到网络连通。

(1)正常情况下两个不同网段之间的容器不能互相ping通,如下图,网段为172.17的容器和网段为192.168的容器之间不能互相ping通

操作过程图:

(2)使用以下命令连通不在同一个网段下的docker容器

docker network connect 网络名称 容器名称

例:

docker network connect mynet centos01

效果图:

(3)再次通过容器名称来互相ping,发现能互相ping通

操作过程图:

 

(4)使用以下命令查看名为mynet的网络的元数据,发现名为mynet的自定义网络下多出一个名为centos01的容器,也就是说把centos01容器放到了mynet网络下,所以不同网段下能互相连通

 

创作不易,如果这篇文章对你有帮助,希望能点个赞帮助文章的推广,如果文章有错漏,希望各位能批评指正,谢谢大家。


http://chatgpt.dhexx.cn/article/RYgwnAmM.shtml

相关文章

京东首页静态页面html+css

个人名片: 😊作者简介:一名大一在校生,web前端开发专业 🤡 个人主页: python学不会 🐼第一次写博客,写的不好望指正 🎅学习目标: 坚持每一次的学习打卡 项目介绍&#xf…

Java-微信H5分享功能

操作前必看 微信自带的点击按钮分享已经下架了,目前只支持在微信浏览器点击右上角的分享,自己配置分享参数,而且目前分享参数也无法使用。 原因:响应国家反垄断规章,微信调整可实现访问外链; 异常&#x…

计算机考证照片尺寸规格

1)照片应为考生本人近期正面免冠彩色证件照。 2)成像区上下要求头上部空1/10,头部占7/10,肩部占1/5,左右各空1/10。采集的图象大小最小为192144(高宽),成像区大小为48mm33mm&#x…

2016 PayPal商家账户界面 如何设置开启IPN

登陆账户到www.paypal.com点击右上方“用户信息”〉“用户信息与设置”,在打开的页面中,点击左侧“销售工具”菜单页面右侧找到“即使付款通知”,点击“更新”链接勾选“接收即使付款通知消息(已启用)”,并…

paypal IPN and PDT

paypal IPN and PDT 相关文档说明: https://developer.paypal.com/docs/classic/ipn/gs_IPN/ https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNTesting/ https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNPDTAnAltern…

paypal付款通知IPN

什么是即时付款通知IPN 当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作为网站付款流程的一部分) 发送付款详细数据到您所指定的URL,以便您了解买家付款的具体情况并做出相应的响应。这个过程我…

paypal 新注册帐号有哪些问题,paypal EC 和paypal checkout 如何设置账户IPN\签名等

一、IPN如何设置 IPN的设置 https://www.paypal.com/cgi-bin/customerprofileweb?cmd_profile-ipn-notify 二、paypal EC的用户名、密码、签名的设置 https://www.paypal.com/businessprofile/mytools/apiaccess/firstparty/signature 三、新账户提示该商家目前无法接收pa…

paypal的IPN机制

paypal对接时发现有这么一个机制,看起来还不错,起到了防止篡改欺诈行为,保证了通信的安全性,但会增加几次通信。

paypal IPN返回

1.设定返回的地址 目标:登录paypal-->用户信息-->我的销售工具-->即时付款通知-->编辑并填写url 填写的URL必须为公网的,不能为局域网,要不就无法接收到paypal发送的信息 2.编写IPN.jsp (此代码为官方代码) //从 PayPal 出读取 P…

沙箱环境和正式环境【PayPal接入(java)】【IPN通知问题】项目实战干货总结记录!

如果你是第一次接入paypal,相信本文的每一个地方都会对你有帮助的!!因为这篇文章都是一个一个的坑踩出来的! 一、接入paypal环境准备: 1、注册paypal账号 https://www.paypal.com 注册“商家账号”,完成…

php paypal ipn,PHP 开发详解:PayPal Instant Payment Notification (IPN)

上次在 PHP 开发详解:PayPal Payment Data Transfer (PDT) 一文中介绍了网站集成 Paypal 付款功能并如何将付款数据返回,能够使得用户在付款完成后继续回到网站上来,并将付款信息告知用户。但是 PayPal Payment Data Transfer 这样的数据返回…

【Paypal】即时付款通知IPN

什么是即时付款通知IPN 当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作为网站付款流程的一部分) 发送付款详细数据到您所指定的URL,以便您了解买家付款的具体情况并做出相应的响应。这个过程我…

java集成paypal ipn响应问题

在集成paypal 测试ipn如果不回复会多次调用ipn 直到上限或者得到响应。 发现一个非常奇怪的问题代码中未返回响应码,但是paypal那边却显示响应成功? 求大神指点,是因为服务器接收成了吗?所以自动回复了200? spring …

paypal消息通知IPN

paypal支付成功时会实时的把支付交易信息返回给我们,java会返回一个payment对象,里面有交易的信息包含付款人,订单费用,订单的收货地址,收款人,交易号等信息。我们拿到了这个payment就表示支付成功了&#…

paypal资料

什么是即时付款通知IPN 当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作为网站付款流程的一部分) 发送付款详细数据到您所指定的URL,以便您了解买家付款的具体情况并做出相应的响应。这个过程我…

css 上下布局 flex,Css Flex布局

Flex布局是Css3中新加入的额外布局系统。 传统布局基于盒模型,依赖“display”、“position”、“float”属性,对于特殊布局非常不便。 因此2009年,W3C提出新的布局方案-Flex布局,但由于浏览器兼容问题,Flex布局并没有大范围铺开。 实现Flex布局的条件 1.必须有一个父级容…

html flex 上中下布局,flex 布局

FlexiableBox即是弹性盒,用来进行弹性布局,一般跟rem(rem伸缩布局(转))连起来用比较方便,flexbox负责处理页面布局,然后rem处理一些flex顾及不到的地方(rem伸缩布局主要处理尺寸的适配问题),布局还是要传统布局的。 布局的传统解决方案,基于盒状模型,依赖display属性 +p…

详细讲解flex布局

一、flex布局基本概念 在没有使用flex布局之前,常用布局有:流式布局,浮动布局,定位布局等等。这些布局的缺陷是子元素需要自己控制自己在父元素中的位置,还要注意父元素高度坍塌。 flex布局是一种布局模型&#xff0…

CSS常用布局二(flex布局)

flex布局 前言:flex是flexible box的缩写,译为“弹性布局”,用来为盒模型提供最大的灵活性,任何一个容器都可以指定为flex布局,只需要设置“display:flex"即可;行内元素可以通过设置”display:inline…