不同容器之间的通信可以借助于 pipework

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

不同容器之间的通信可以借助于 pipework 这个工具

pipework是由Docker的工程师Jérme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。

下载地址:wgethttps://github.com/jpetazzo/pipework.git

1
2
[root@localhost src] # unzip pipework-master.zip
[root@localhost src] # cp -p pipework-master/pipework /usr/local/bin/

安装相应依赖软件

1
2
3
yum  install  bridge-utils -y    
[root@localhost src] # docker load < centos7http.tar
[root@localhost src] # yum -y install docker

配置桥接网络 

wKioL1mgNe-ycPdgAAAjwJeZ-ME166.png-wh_50

wKioL1mgNfCywf5HAAAKdo7uCag583.png-wh_50

1
[root@localhost src] # systemctl restart network

wKiom1mgNhKScuBTAABAOkJBNAo213.png-wh_50

 docker 的桥接指定为 br0,这样跨主机不同容器之间通过 pipework 新建 docker 容器的网卡桥接到 br0,这样跨主机容器之间就可以通信了。

1
2
3
[root@localhost src] # systemctl  stop docker
OPTIONS= '--selinux-enabled --log-driver=journald --signature-verification=false -b=br0'   添加
[root@localhost src] # systemctl start docker

pipework

 docker 默认桥接指定到了 br0,则最好在创建容器的时候加上--net=none,防止自动分配的 IP 在局域网中有冲突。

1
[root@localhost src] # pipework

使用镜像运行一个容器

1
2
[root@localhost src] # docker run -dit --net=none centos7:http
230f28d287a9013b7b660e1b57831c65b82c5338dfafdc16871fe6e0ccc7e150

注:默认不指定网卡设备名,则默认添加为 eth1

1
[root@localhost ~] # pipework  br0 -i eth0 230f28d287a 192.168.100.50/24@192.168.100.1

注:另外 pipework 不能添加静态路由,如果有需求则可以在 run 的时候加上 --privileged=true 权限在容器中手动添加,但这种安全性有缺陷,可以通过 ip netns 操作 密码默认是 admin

1
[root@localhost ~] # ssh admin@192.168.100.50

wKiom1mgNsXBx6BgAABDbhOuDSg035.png-wh_50

访问容器提供的web服务:

wKioL1mgNsbwTKGbAABI-nw2pp0109.png-wh_50

使用ip netns添加静态路由,避免创建容器使用--privileged=true选项造成一些不必要的安全问题:

1
2
3
4
[root@localhost ~] # docker inspect  --format="``.`State`.`Pid`" 230f28d287a9
19440
[root@localhost ~] # ln -s /proc/19440/ns/net /var/run/netns/19440
[root@localhost ~] #








     本文转自柴鑫旺 51CTO博客,原文链接:http://blog.51cto.com/chaixinwang/1959621 ,如需转载请自行联系原作者


相关文章
|
10月前
|
存储 传感器 物联网
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
773 0
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
|
网络协议 网络虚拟化 数据中心
一文彻悟容器网络通信
作者:云原生应用平台 - 陈赟豪(环河)本文深入浅出地介绍了容器网络出现的背景、容器网络的CNI插件及分类对比,描述了容器网络插件的Pod同节点和跨节点通信过程及其应用场景,让读者能过通过简短的篇幅窥见容器网络的真谛。背景容器网络为何出现在一个汽车发动机的生产车间中,汽车发动机的各个组件会存在一定的顺序进行组装,这就要求有直接关系的组件必须知道下一个组件的具体位置。当一个汽车发动机组装完成后,距离
1010 0
一文彻悟容器网络通信
|
10天前
|
NoSQL 应用服务中间件 Redis
Docker跨宿主机容器通信-通过网络跨宿主机互联
这篇文章介绍了Docker容器跨宿主机通信的实现方法,包括Docker的四种网络模式(host、none、container、bridge)以及如何通过修改网络配置和添加路由规则来实现不同宿主机上的容器之间的互联。
30 0
Docker跨宿主机容器通信-通过网络跨宿主机互联
|
10天前
|
应用服务中间件 nginx Docker
Docker同一台宿主机容器通信-通过容器名称互联
本文详细介绍了如何通过容器名称实现同一宿主机上容器间的互联,并提供了实战案例。首先,文章解释了容器间通过自定义名称访问的原理,随后演示了创建并连接Tomcat与Nginx容器的具体步骤。此外,还讨论了配置中可能出现的问题及解决方案,包括避免硬编码IP地址和使用自定义容器别名来增强系统的灵活性与可维护性。通过这些实践,展示了如何高效地配置容器间通信,确保服务稳定可靠。
16 1
Docker同一台宿主机容器通信-通过容器名称互联
|
3月前
|
Linux Docker 容器
蓝易云 - net.ipv4.ip_forward=0导致docker容器无法与外部通信
完成以上步骤后,Docker容器应该能够正常与外部通信了。
117 2
|
11月前
|
存储 数据库 网络架构
Docker网络模型:理解容器网络通信和连接
Docker网络模型:理解容器网络通信和连接
383 0
|
11月前
|
应用服务中间件 Shell 数据库
Docker 容器间通信
Docker 容器间通信
169 1
|
Linux 网络虚拟化 数据中心
【docker】容器间跨宿主机通信-基于overlay
【docker】容器间跨宿主机通信-基于overlay
661 0
【docker】容器间跨宿主机通信-基于overlay
|
关系型数据库 MySQL 应用服务中间件
docker--容器间通信 Link(单向通信)、bridge(双向通信)
docker--容器间通信 Link(单向通信)、bridge(双向通信)
|
Docker 容器
docker compose设置不同容器间通信
docker compose新启动了一个容器,这个时候怎么去连接到其他容器呢,去容器里面ping发现不通。一般来说是因为和其他容器没有在一个网络环境里面。首先用命令查看一下当前存在哪些网络环境。
353 0