本文主要讲述,将docker的容器ip设置为宿主机同一网段,并且允许宿主机以及局域网其它机器访问它。

# 创建docker的虚拟网络,本人局域网的网段为192.168.1.0/24,网关为路由器的192.168.1.1
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=br0 docker-bridge

# 创建docker容器,通过network参数指定前面创建的虚拟网络,ip参数指定容器的ip地址。下面是个例子,具体命令可以自行替换
docker run -itd --name test --network=docker-bridge --ip=192.168.1.18 alpine

        进行到这里之后,会发现外部机器能ping通容器,但是宿主机无法ping通,这是因为macvlan的原因,还需要进行以下步骤

# 添加一个虚拟网卡并桥接到物理网卡,我这里因为上面还有一层虚拟网桥,所以用的是br0,否则就是用物理网卡名
ip link add macvlan-proxy link br0 type macvlan mode bridge
 
# 给虚拟网卡配置ip,这里可以是网段内任意ip,但是要避免ip冲突
ip addr add 192.168.1.16 dev macvlan-proxy
 
# 启用虚拟网卡
ip link set macvlan-proxy up
 
# 添加路由映射表,这里ip使用容器的ip
ip route add 192.168.1.18 dev macvlan-proxy

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐