我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Docker容器互访三种方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Docker容器互访三种方式

docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢。

下面介绍三种方法来解决容器互访问题,分别是:

虚拟ip访问
link
创建bridge网络

 

本文以一台centos 7.6服务器来演示。

 

安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间可以根据ip互相访问。

运行一个centos镜像, 查看ip地址得到:172.17.0.2

# docker run -it alpine /bin/sh
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:266 (266.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ #

 

以同样的命令再起一个容器,查看ip地址得到:172.17.0.3

# docker run -it alpine /bin/sh
/ # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:656 (656.0 B)  TX bytes:0 (0.0 B)

/ #

容器内部ping测试结果如下:

/ # ping 172.17.0.2 -c 3
PING 172.17.0.2 (172.17.0.2): 56 data bytes
bytes from 172.17.0.2: seq=0 ttl=64 time=0.063 ms
bytes from 172.17.0.2: seq=1 ttl=64 time=0.144 ms
bytes from 172.17.0.2: seq=2 ttl=64 time=0.164 ms

--- 172.17.0.2 ping statistics ---
packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.063/0.123/0.164 ms
/ #

这种方式必须知道每个容器的ip,在实际使用中并不实用。

 

运行容器的时候加上参数link

运行第一个容器,指定容器名为alpine-1

# docker run -it --name alpine-1 alpine /bin/sh
/ # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1034 (1.0 KiB)  TX bytes:378 (378.0 B)

/ #

 

运行第二个容器

# docker run -it --name alpine-2 --link alpine-1:alpine-1 alpine /bin/sh
/ #
–link:参数中第一个alpine-1是容器名,

第二个alpine-1是定义的容器别名(使用别名访问容器),为了方便使用,一般别名默认容器名。

 

测试结果如下:

/ # ping alpine-1 -c 3
PING alpine-1 (172.17.0.2): 56 data bytes
bytes from 172.17.0.2: seq=0 ttl=64 time=0.137 ms
bytes from 172.17.0.2: seq=1 ttl=64 time=0.094 ms
bytes from 172.17.0.2: seq=2 ttl=64 time=0.155 ms

--- alpine-1 ping statistics ---
packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.094/0.128/0.155 ms
/ #

 此方法对容器创建的顺序有要求,如果集群内部多个容器要互访,使用就不太方便。

 

安装好docker后,运行如下命令创建bridge网络:

docker network create testnet

 

查询docker网络

# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
fafe4fde637b        bridge              bridge              local
c0278ae7a153        host                host                local
4182d614a7f6        none                null                local
098368c92d0f        testnet             bridge              local

能看到上面创建的网络就表示创建成功了。

 

运行容器连接到testnet网络

使用方法:docker run -it --name <容器名> —network --network-alias <网络别名> <镜像名>

先删除之前创建的2个容器

docker rm -f alpine-1
docker rm -f alpine-2

再重新创建第一个容器

# docker run -it --name alpine-1 --network testnet --network-alias alpine-1 alpine /bin/sh
/ # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:AC:12:00:02  
          inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1032 (1.0 KiB)  TX bytes:0 (0.0 B)

/ #

 

创建第二个容器

# docker run -it --name alpine-2 --network testnet --network-alias alpine-2 alpine /bin/sh
/ # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:AC:12:00:03  
          inet addr:172.18.0.3  Bcast:172.18.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:516 (516.0 B)  TX bytes:0 (0.0 B)

/ #

 

使用第二个容器ping第一个容器地址

/ # ping alpine-1 -c 3
PING alpine-1 (172.18.0.2): 56 data bytes
bytes from 172.18.0.2: seq=0 ttl=64 time=0.044 ms
bytes from 172.18.0.2: seq=1 ttl=64 time=0.167 ms
bytes from 172.18.0.2: seq=2 ttl=64 time=0.159 ms

--- alpine-1 ping statistics ---
packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.044/0.123/0.167 ms
/ #

推荐使用这种方法,自定义网络,因为使用的是网络别名,可以不用顾虑ip是否变动,只要连接到docker内部bright网络即可互访。bridge也可以建立多个,隔离在不同的网段。

 

如果需要单机部署Spring Cloud,就适合这种方式。各个微服务之间,需要相互调用。

 

 

本文参考链接:

https://blog.csdn.net/golden_zjy/article/details/100132718


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Docker容器互访三种方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Docker容器互访三种方式

docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢。下面介绍三种方法来解决容器互访问题,分别是:虚拟ip访问link创建bridge网络本文以一台centos 7.6服务器来演示。安装docker时,dock
2023-01-31

docker容器互联的方式有哪些

Docker容器互联的方式有以下几种:使用Docker Compose:Docker Compose是一个用于定义和运行多个Docker容器的工具。通过在docker-compose.yml文件中定义容器之间的连接和依赖关系,可以实现容器之
2023-10-22

docker容器间互相访问(dockerbridge网络)

本文主要介绍了docker容器间互相访问(dockerbridge网络),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-04

Struts2访问Servlet的三种方式

基本介绍在Struts2中,Action并没有直接和Servlet API耦合。虽然Struts2 中的Action访问Servlet API麻烦一些,但是这却是Struts2中Action的重要改良之一,方便Action进行单元测试。尽管
2023-05-31

Docker容器与宿主机相互访问更方便的方法

Docker是当今使用范围最广的开源容器技术之一,具有高效易用的优点,然而如果使用Docker时采取不当安全策略,则可能导致系统面临安全威胁,这篇文章主要给大家介绍了关于Docker容器与宿主机相互访问更方便的方法,需要的朋友可以参考下
2023-05-20

docker的三种安装方式汇总

这篇文章主要介绍了docker的三种安装方式汇总,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-09

Docker容器进入的4种方式(小结)

本文主要介绍了Docker容器进入的4种方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-04

Docker容器互联互通的实现方法

这篇文章主要介绍了Docker容器互联互通,本文讲解不同网络下的容器可以通过加入同一个docker网络,来访问该docker网络下的容器,并且既可以通过容器ip也可以通过容器名连接,非常方便,需要的朋友可以参考下
2022-11-13

快速修改运行中的docker容器端口映射的三种方式

当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则,那么这种情况我们该怎么处理呢?今天教如何修改运行中的docker容器的端口映射,感兴趣的朋友跟随小编一起看看吧
2023-01-15

Docker跨主机容器间相互访问的实现

本文主要介绍了Docker跨主机容器间相互访问的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-04

docker compose容器互相连接的方法

这篇文章主要介绍了docker compose容器互相连接的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇docker compose容器互相连接的方法文章都会有所收获,下面我们一起来看看吧。haproxy
2023-06-29

详解Spring Boot 访问Redis的三种方式

目录前言开始准备RedisTemplateJPA RepositoryCache总结前言最近在极客时间上面学习丁雪丰老师的《玩转 Spring 全家桶》,其中讲到访问Redis的方式,我专门把他们抽出来,在一起对比下,体验一下三种方式开发
2022-12-13

详解Spring Boot 访问Redis的三种方式

这篇文章主要介绍了Spring Boot 访问Redis的三种方式,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-14

Docker之实现挂载的三种方式汇总

这篇文章主要介绍了Docker之实现挂载的三种方式汇总,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录