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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

不同容器之间的通信可以借助于 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 ,如需转载请自行联系原作者


相关文章
|
7月前
|
域名解析 网络协议 Linux
Docker网络及容器间通信详解
本实验通过docker DNS server和joined 容器两种方法实现Docker容器间的通信。Docker容器间通信可用于监控其他容器的网络流量、不同容器中程序如web server和app server的高效通信等场景。通过实验进一步熟悉Docker的架构和基本操作,了解Docker容器间通信的方式。
|
6月前
|
存储 传感器 物联网
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
326 0
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
|
存储 Kubernetes 监控
一文彻悟容器网络通信
作者:云原生应用平台 - 陈赟豪(环河)本文深入浅出地介绍了容器网络出现的背景、容器网络的CNI插件及分类对比,描述了容器网络插件的Pod同节点和跨节点通信过程及其应用场景,让读者能过通过简短的篇幅窥见容器网络的真谛。背景容器网络为何出现在一个汽车发动机的生产车间中,汽车发动机的各个组件会存在一定的顺序进行组装,这就要求有直接关系的组件必须知道下一个组件的具体位置。当一个汽车发动机组装完成后,距离
817 0
一文彻悟容器网络通信
|
7月前
|
存储 数据库 网络架构
Docker网络模型:理解容器网络通信和连接
Docker网络模型:理解容器网络通信和连接
222 0
|
7月前
|
应用服务中间件 Shell 数据库
Docker 容器间通信
Docker 容器间通信
136 1
|
9月前
|
关系型数据库 MySQL 应用服务中间件
docker--容器间通信 Link(单向通信)、bridge(双向通信)
docker--容器间通信 Link(单向通信)、bridge(双向通信)
|
Linux 网络虚拟化 数据中心
【docker】容器间跨宿主机通信-基于overlay
【docker】容器间跨宿主机通信-基于overlay
596 0
【docker】容器间跨宿主机通信-基于overlay
|
10月前
|
Docker 容器
docker compose设置不同容器间通信
docker compose新启动了一个容器,这个时候怎么去连接到其他容器呢,去容器里面ping发现不通。一般来说是因为和其他容器没有在一个网络环境里面。首先用命令查看一下当前存在哪些网络环境。
280 0
|
10月前
|
弹性计算 运维 Java
虚机和容器通信方案
随着公司的发展;势必要跟随时代的脚步向微服务、容器化方向转型;然而转型过程中势必得遵循服务的迭代替换的方式(一刀切带来的风险太大了);从而衍生出来虚机和容器中的服务进行注册发现通信的问题。
|
12月前
|
消息中间件 安全 前端开发
「第二部:容器和微服务架构](12) 基于异步消息的通信
「第二部:容器和微服务架构](12) 基于异步消息的通信