使用環境:
兩臺運行docker的服務器
A機器網段:192.168.86.61
B機器網段:192.168.86.62
運行的容器需裝有ping指令,
實驗參數解釋:
-d macvlan 指定創建網絡驅動類型
--subnet= 指定子網范圍
-gateway 指定網關地址
-o parent=eth0 指定宿主機物理接口(父接口)
macvlan_net 創建子網指定其網絡名稱
實驗一:A B機器的容器可以互通,無法與宿主機互通,無法上外網,只能與同vlan中容器通信【一個macvlan只能綁定一個物理接口】
操作步驟一,
A機器操作:
## 創建一個新的網絡,指定其網絡驅動類型 ,指定子網和網關,指定父接口,并賦名
docker network create -d macvlan --subnet=172.18.1.0/24 --gateway=172.18.1.1 -o parent=eth0 macvlan_net
## 啟動一個可用ping命令的容器,指定網絡模式,指定靜態ip
docker run -itd --name test-1 --net macvlan_net --ip=172.18.1.10 centos:7
B機器操作:
docker network create -d macvlan --subnet=172.18.1.0/24 --gateway=172.18.1.1 -o parent=eth0 macvlan_net docker run -itd --name test-1 --net macvlan_net --ip=172.18.1.10 centos:7
測試A B
A機器操作
docker exec -it test-1 ping baidu.com
docker exec -it test-1 ping 172.18.1.20
docker exec -it test-1 ping 192.168.86.62
B機器操作
docker exec -it test-2 ping 172.18.1.10
docker exec -it test-2 ping 192.168.86.61
docker exec -it test-2 ping baidu.com
實驗結果:可以看到兩個容器之間可以互相通信。但無法和外網及宿主機通信。
[root@mongodb-1 ~]# docker exec -it test-1 ping baidu.com
PING baidu.com (182.61.201.211) 56(84) bytes of data.
From e450a1930ae1 (172.18.1.10) icmp_seq=1 Destination Host Unreachable
From e450a1930ae1 (172.18.1.10) icmp_seq=2 Destination Host Unreachable
From e450a1930ae1 (172.18.1.10) icmp_seq=3 Destination Host Unreachable
------------------------------------------------
[root@mongodb-1 ~]# docker exec -it test-1 ping 172.18.1.20
PING 172.18.1.20 (172.18.1.20) 56(84) bytes of data.
64 bytes from 172.18.1.20: icmp_seq=1 ttl=64 time=2.24 ms
64 bytes from 172.18.1.20: icmp_seq=2 ttl=64 time=1.91 ms
------------------------------------------------
[root@mongodb-1 ~]# docker exec -it test-1 ping 192.168.86.62
PING 192.168.86.62 (192.168.86.62) 56(84) bytes of data.
From 172.18.1.10 icmp_seq=1 Destination Host Unreachable
From 172.18.1.10 icmp_seq=2 Destination Host Unreachable
清理環境
docker rm -f test-1
docker rm -f test-2
docker network rm macvlan_net
實驗二,容器和同網段其他設備互通和宿主機不互通
設置macvlan子網和宿主機完全同網段,容器和同網段其他設備互通,但是無法和宿主機互通(走的是本地的路由器
A機器操作
docker network create -d macvlan --subnet=192.168.86.0/24 --gateway=192.168.86.2 -o parent=eth0 macvlan_host_netdocker run -itd --name tset-1 --net macvlan_host_net --ip=192.168.86.110 centos:7
B機器操作
docker network create -d macvlan --subnet=192.168.86.0/24 --gateway=192.168.86.2 -o parent=eth0 macvlan_host_netdocker run -itd --name tset-1 --net macvlan_host_net --ip=192.168.86.111 centos:7
測試
A機器操作
docker exec -it test-1 ping baidu.com
docker exec -it test-1 ping 192.168.86.111
docker exec -it test-1 ping 192.168.86.62
B機器操作
docker exec -it test-2 ping 192.168.86.110
docker exec -it test-2 ping 192.168.86.61
docker exec -it test-2 ping baidu.com