docker跨主机container通信的方法,此文将为container配置与宿主机相同网段的ip地址,使container成为一个“实实在在”的主机,与vmware中 将虚拟机配置一个公有ip一样,从网络上看container享有一个独立ip。
https://blog.csdn.net/weixin_40612840/article/details/80260702
1.修改宿主机的网卡
意思好像是将 原本的物理网卡变成公共的,再为宿主的的网卡声明为br0。原本的物理网卡不配值ip地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-br0
vi ifcfg-ens33删除ip,netmask,新增BRIDGE=br0。
vi ifcfg-br0 设TYPE=Bridge,DEVICE=br0。
Service network restart
[root@cm network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
[root@cm network-scripts]# cat ifcfg-br0
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
TYPE=Bridge
DEVICE=br0
IPADDR=192.168.229.131
NETMASH=255.255.255.0
GATEWAY=192.168.229.2
2.开启容器并为容器配置ip
使用pipework为指定的container增加公网ip地址,缺点:但是这个ip地址只要container重启后就会消失,需要重新使用pipework在宿主机里再次为container配置公网ip地址。即使在container里使用systemctl start network也会失败
开启一个image并指定网络模式为none(这样,创建的容器就不会通过docker0自动分配ip了,而是根据pipework工具自定ip指定)
docker run -itd --net=none --name=my_centos image_id /bin/bash
docker run -itd --privileged --net=none 9c734ec0c21c /usr/sbin/init ##以特权模式开启container
给该容器配置网络(注意网卡里的gateway不能缺失)
pipework br0 -i ens33 c5c9625fa24b 192.168.229.101/[email protected]
-i指定网卡名,后面为指定container的ip,netmask,gateway。
登录该容器
docker exec -it my_centos /bin/bash
ifconfig ens33 若无ifconfig则可yum安装net-tools工具
安装pipework
安装git
yum install git
安装pipework
git clone https://github.com/jpetazzo/pipework
使pipework命令生效
cp ~/pipework/pipework /usr/local/bin/
安装相应依赖软件bridge-utils(网桥)
yum install iputils-arping bridge-utils –y
制作docker的基础的Linux系统镜像
tar-cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .(“不要忽略结尾处的”.””)