Docker macvlan的使用及访问主机问题解决

2022-01-09  本文已影响0人  小李子Levy

前言

我们在使用docker时,大多数情况下容器网络都是用的bridge,然后通过端口映射暴露服务。但有些场景我们想为容器添加单独的ip,这个时候macvlan网络就排上用场了。

使用

创建

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查看

image.png
后续在创建容器时通过参数--network vnet指定使用该网络即可。为了能够使用固定的ip,可以在创建容器时通过参数--ip 192.168.3.x指定容器ip,然后通过docker inspect container_name可以看到分配到了正确的ip
image.png

容器和宿主机访问问题

使用上述网络的容器,虽然可以和局域网内的其他设备互相访问,但是却无法和宿主机互相访问,ping命令会返回no route to host,貌似是出于安全考虑。如果要解决这个问题,需要在物理网卡上再创建一个macvlan来实现。这里直接放脚本

#!/bin/bash
ip link add net-shim link eth0 type macvlan mode bridge
ip addr add 192.168.3.239/32 dev net-shim # 这里是宿主机的virtual ip
ip link set net-shim up
ip route add 192.168.3.240/28 dev net-shim # 这里是上面创建docker网络时执行的ip range

然后在宿主机上就可以通过容器ip直接访问,在容器中需要访问宿主机需要通过虚拟ip访问。
建议在路由器上设置一下DHCP的范围,避免造成ip冲突。

上一篇下一篇

猜你喜欢

热点阅读