您的位置:首页 > 其它

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

2017-08-25 22:41 232 查看
不同容器之间的通信可以借助于 pipework 这个工具pipework是由Docker的工程师Jérme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。下载地址:wgethttps://github.com/jpetazzo/pipework.git
[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 docker
pipework
把 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,这样跨主机容器之间就可以通信了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息