前言
我們在使用docker時(shí)支救,大多數(shù)情況下容器網(wǎng)絡(luò)都是用的bridge抢野,然后通過端口映射暴露服務(wù)。但有些場景我們想為容器添加單獨(dú)的ip各墨,這個(gè)時(shí)候macvlan網(wǎng)絡(luò)就排上用場了指孤。
使用
創(chuàng)建
docker network create \
--driver=macvlan \
--gateway=192.168.3.1 \
--subnet=192.168.3.0/24 \
--ip-range=192.168.3.240/28 \
-o parent=eth0 vnet
使用命令docker network ls
查看
后續(xù)在創(chuàng)建容器時(shí)通過參數(shù)
--network vnet
指定使用該網(wǎng)絡(luò)即可。為了能夠使用固定的ip,可以在創(chuàng)建容器時(shí)通過參數(shù)--ip 192.168.3.x
指定容器ip恃轩,然后通過docker inspect container_name
可以看到分配到了正確的ip容器和宿主機(jī)訪問問題
使用上述網(wǎng)絡(luò)的容器结洼,雖然可以和局域網(wǎng)內(nèi)的其他設(shè)備互相訪問,但是卻無法和宿主機(jī)互相訪問叉跛,ping命令會返回no route to host松忍,貌似是出于安全考慮。如果要解決這個(gè)問題筷厘,需要在物理網(wǎng)卡上再創(chuàng)建一個(gè)macvlan來實(shí)現(xiàn)鸣峭。這里直接放腳本
#!/bin/bash
ip link add net-shim link eth0 type macvlan mode bridge
ip addr add 192.168.3.239/32 dev net-shim # 這里是宿主機(jī)的virtual ip
ip link set net-shim up
ip route add 192.168.3.240/28 dev net-shim # 這里是上面創(chuàng)建docker網(wǎng)絡(luò)時(shí)執(zhí)行的ip range
然后在宿主機(jī)上就可以通過容器ip直接訪問,在容器中需要訪問宿主機(jī)需要通過虛擬ip訪問酥艳。
建議在路由器上設(shè)置一下DHCP的范圍摊溶,避免造成ip沖突。