docker容器的跨主机通信有好多种方案,此处用的是桥接物理网卡的方式实现的;

一、新建网卡,并桥接物理网卡;

在宿主机上新建一个网卡,并桥接物理网卡,可以使用 nm-connection-editor 命令进入图形化界面进行配置,也可以用 nmcli connection 命令的方式配置,还可以使用 在/etc/sysconfig/network-scripts/下编辑配置文件的方式进行配置;

为了快速方便,此处使用  nmcli connection 命令的方式进行配置:

1、创建新网卡;

nmcli connection add type bridge con-name bridge1 ifname br_1

#bridge1 和 br_1 是网卡名字,可以随便写;

2、修改网卡参数;

nmcli connection modify bridge1 ipv4.addresses 192.168.139.200/24 ipv4.gateway 192.168.139.2 ipv4.method manual

#ipv4.addresses是宿主机网段中的一个ip,可以和宿主机ip相同,为了抢占宿主机的网卡使用权;

#ipv4.gateway是宿主机的网关,不知道的可以 route -n 看下;

#ipv4.method 是设置该网卡为手动,即:不需要自动获取ip;

3、配置桥接;

nmcli connection add type bridge-slave ifname ens33 con-name br-slave master br_1

#ifname 是宿主机的物理网卡;

#br-slave 是桥接的网卡,可以随便写;

#br_1 是上面创建的网卡;

4、执行结果;

docker间容器通信 docker容器通信主机端口_docker容器跨主机通信

5、需要 systemctl restart network 重启网卡;

重启后 ssh 192.168.139.200 进行连接;通过 ip a 命令可以看到:

docker间容器通信 docker容器通信主机端口_桥接网络_02

原有的物理网卡 ens33 没有了ip,创建的 br_1 是我们设定的ip;再通过 brctl show 查看:

docker间容器通信 docker容器通信主机端口_docker容器跨主机通信_03

br_1桥接到了原有的物理网卡ens33上;但此时如果你ping百度的话应该是不通的,根据错误进行排查是路由问题还是dns问题:

docker间容器通信 docker容器通信主机端口_pipework_04

6、配置好桥接网络再进行以下步骤;

二、下载pipework工具,并配置环境变量;

1、pipework工具github链接: https://github.com/jpetazzo ;你会发现大神总有与众不同的地方,膜拜......

2、执行git命令拉取,并配置环境变量:

git clone https://github.com/jpetazzo/pipework
cp ./pipework/pipework /usr/local/bin/

ok,现在可以使用 pipework 这个命令工具了;

三、运行一个容器并使用none网络模式;

1、大家都知道docker容器有三种网络模式: bridge、host、none,具体作用此处不再多述;

2、创建一个none网络的容器:

docker run -it --network none --name pipework_test centos:full /bin/bash

docker间容器通信 docker容器通信主机端口_docker间容器通信_05

none网络是只有lo网卡的;

四、使用pipework进行配置容器 pipework_test 的ip地址;

1、 执行命令给容器配置ip:

pipework bridge0 pipework_test 192.168.139.210/24@192.168.139.2

#192.168.139.210是给容器配置的ip,应考虑避免网段中是否已有该ip;

#192.168.139.2是网关,也就是宿主机网关;

五、测试通信;

到容器中查看:

docker间容器通信 docker容器通信主机端口_docker容器跨主机通信_06

多出来一个eth1的网卡;

ok;再来看一下路由和dns:

docker间容器通信 docker容器通信主机端口_docker_07

正常;

最后ping一下百度:

docker间容器通信 docker容器通信主机端口_docker间容器通信_08

ok;到此完毕;

 

  • 注: 容器重启后会导致pipework配置的ip消失;
  • 可以通过shell脚本进行自动化ip的配置,具体看个人应用情况了;