不同容器之间的通信可以借助于 pipework
2017-08-25 22:41
232 查看
不同容器之间的通信可以借助于 pipework 这个工具pipework是由Docker的工程师Jérme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。下载地址:wgethttps://github.com/jpetazzo/pipework.git
把 docker 的桥接指定为 br0,这样跨主机不同容器之间通过 pipework 新建 docker 容器的网卡桥接到 br0,这样跨主机容器之间就可以通信了。
把 docker 默认桥接指定到了 br0,则最好在创建容器的时候加上--net=none,防止自动分配的 IP 在局域网中有冲突。
访问容器提供的web服务:
使用ip netns添加静态路由,避免创建容器使用--privileged=true选项造成一些不必要的安全问题:
进入容器查看路由记录:
在其它宿主机进行相应的配置,新建容器并使用 pipework 添加虚拟网卡桥接到 br0,测试通信情况即可。注:可以删除 docker0,直接把 docker 的桥接指定为 br0。也可以保留使用默认的配置,这样单主机容器之间的通信可以通过 docker0,而跨主机不同容器之间通过 pipework 新建docker 容器的网卡桥接到 br0,这样跨主机容器之间就可以通信了。
[root@localhost src]# unzip pipework-master.zip [root@localhost src]# cp -p pipework-master/pipework /usr/local/bin/安装相应依赖软件
yum install bridge-utils -y [root@localhost src]# docker load < centos7http.tar [root@localhost src]# yum -y install docker配置桥接网络
[root@localhost src]# systemctl restart network
把 docker 的桥接指定为 br0,这样跨主机不同容器之间通过 pipework 新建 docker 容器的网卡桥接到 br0,这样跨主机容器之间就可以通信了。
[root@localhost src]# systemctl stop docker OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false -b=br0' 添加 [root@localhost src]# systemctl start dockerpipework
把 docker 默认桥接指定到了 br0,则最好在创建容器的时候加上--net=none,防止自动分配的 IP 在局域网中有冲突。
[root@localhost src]# pipework使用镜像运行一个容器
[root@localhost src]# docker run -dit --net=none centos7:http 230f28d287a9013b7b660e1b57831c65b82c5338dfafdc16871fe6e0ccc7e150注:默认不指定网卡设备名,则默认添加为 eth1
[root@localhost ~]# pipework br0 -i eth0 230f28d287a 192.168.100.50/24@192.168.100.1注:另外 pipework 不能添加静态路由,如果有需求则可以在 run 的时候加上 --privileged=true 权限在容器中手动添加,但这种安全性有缺陷,可以通过 ip netns 操作 密码默认是 admin
[root@localhost ~]# ssh admin@192.168.100.50
访问容器提供的web服务:
使用ip netns添加静态路由,避免创建容器使用--privileged=true选项造成一些不必要的安全问题:
[root@localhost ~]# docker inspect --format="``.`State`.`Pid`" 230f28d287a9 19440 [root@localhost ~]# ln -s /proc/19440/ns/net /var/run/netns/19440 [root@localhost ~]# ip netns exec 19440 ip route add 192.168.0.0/16 dev eth0 via 192.168.100.254 [root@localhost ~]# ip netns exec 19440 ip route default via 192.168.100.1 dev eth0
进入容器查看路由记录:
在其它宿主机进行相应的配置,新建容器并使用 pipework 添加虚拟网卡桥接到 br0,测试通信情况即可。注:可以删除 docker0,直接把 docker 的桥接指定为 br0。也可以保留使用默认的配置,这样单主机容器之间的通信可以通过 docker0,而跨主机不同容器之间通过 pipework 新建docker 容器的网卡桥接到 br0,这样跨主机容器之间就可以通信了。
相关文章推荐
- 不同容器之间的通信可以借助于 pipework
- 不同VLAN之间就算没有三层设备也可以相互通信
- Atitit 容器化技术之道 attilax著 1. 概念 1 1.1. 容器是应用服务器中位于组件和平台之间的接口集合。 1 1.2. 有时候也指集合的概念,里面可以存放不同对象 2 1.3. 、新
- CLR via C# 读书笔记 6-2 不同AppDomain之间的通信
- java线程间通信[实现不同线程之间的消息传递(通信),生产者和消费者模型]
- 配置单臂路由实现不同vlan之间的通信
- spring不同容器之间如何调用
- android活动之间的通信 setResult两种不同回调方法的差异
- 不同VLAN之间相互通信的两种方式 (单臂路由、三层交换)
- 安卓回调函数解决不同类之间函数调用和数据通信的问题
- 不同项目之间的通信
- Codeforces Round #217 (Div. 2) c题 C. Mittens n手套,手套的颜色m种,任意两个人之间可以交换手套,最多多少人左手和右手的手套颜色不同
- Activity与Service通信(不同进程之间)
- 不同VLAN之间相互通信的两种方式(方式一:单臂路由)
- 不同vlan之间相互通信
- 不同VLAN之间相互通信的两种方式(单臂路由、三层交换)
- docker不同容器间的通信
- 测试两台主机之间是否可以UDP通信
- 安卓多线程间通信和多进程之间通信有什么不同?分别怎么实现?
- Activity与Service通信(不同进程之间)