docker使用macvlan获取独立ip
docker使用macvlan获取独立ip
docker启动的容器会获取一个docker分配的内网ip,一般是172开头。现在想让容器内获取一个与宿主机同级别的ip,在路由器看来是两个独立的设备。
这里需要使用linux的 macvlan功能,他可以把物理网卡虚拟出来一个,让其拥有独立的mac地址,在路由器看来就是独立的设备。
操作
使用docker命令创建一个macvlan的网络
该命令会创建一个macvlan类型的network,同时指定子网和网关,parent表示绑定的物理网卡,macvlan-net未网络的名字1
2
3docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=enp2s0 macvlan-net
docker network ls #使用这个命令查看我们常见出来的network启动docker容器,指定刚才创建的网络,并且指定了其IP地址(IP需要没有被使用)
1
docker run --network=macvlan-net --rm --ip=192.168.1.200 --name=my-container -it alpine:latest /bin/sh
上述两条命令执行完成后,容器启动起来后,可以测试网络是正常的。
同时打开路由器或光猫后台,能够看到192.168.1.200 作为一台独立的设备连接进来了。
解决与宿主机不通的问题
但是但是,基于安全考虑在Linux上macvlan与宿主机之间是不互通的。假设宿主机ip是 192.168.1.2他和 192.168.1.200之间相关ping不通。
但是两个macvlan之间是互通的,因此我们可以这么做。
1 |
|
做完这些,这样我们宿主机上就有了三个网卡了:
- enp2s0 物理网卡,ip 192.168.1.2
- macvlan-net 网卡,其中ip是 192.168.1.200 被分配给了docker容器内使用
- macvlan-shim 网卡,其中ip是 192.168.1.210,宿主机使用
宿主机ip与两个macvlan是不通的,但是macvlan之间可以通。
宿主机上添加一条路由表,表明192.168.1.200走macvlan-shim这个网卡,
又因为macvlan-shim网卡与macvlan-net是通的,他能找到 192.168.1.200这台机器,因此宿主机与容器网络打通了。
1 |
|
拆除
不想要了把上面的配置都还原。
1 |
|
docker compose配置
使用compose方式配置network,可以按照下面模板做修改
1 |
|
docker使用macvlan获取独立ip
https://www.huangchaoyu.com/2533120124.html