Docker 使用宿主机网段
Docker 使用宿主机网段多是使用 MacVlan 创建虚拟网络实现。
但本人在 RockyLinux 9.3 (ESXi 中运行的虚拟机)测试结果不尽人意。
主要问题是:容器无法访问宿主机所在局域网网关和网段内的其它 IP 地址
。
(PS:后续查询资料,该问题是未开启 ESXi 的网卡混杂模式。另所查资料原文说 MacVlan 模式 1 个物理网卡仅支持 2 台虚拟机,超出 2 台后掉包严重,原因不明。)
最后改用了 Docker 新的 IpVlan 驱动方式解决问题。
IpVlan 和 MacVlan 使用方法基本一致,个别参数有差别,但基本上用不到。
创建 IpVlan 网络
创建 IpVlan 网络:
1 | docker network create \ |
参数说明:
- -d:创建网络的驱动方式为 ipvlan。
- –subnet=192.168.8.0/24:ipv4 的网段为 192.168.1.0/24(宿主机所在网段)。
- –gateway=192.168.1.1:ipv4 的网关为 192.168.1.1(宿主机网关)。
- –ipv6:启用 ipv6。
- –subnet=fd00:db8:1:ddee::/64:ipv6 的网段为 fd00:db8:1:ddee::/64。
- –gateway=fd00:db8:1:ddee::1:ipv6 的网关为 gateway=fd00:db8:1:ddee::1
- -o ipvlan_mode=l2:ipvlan 工作模式为 l2(默认就是 l2,可省略该参数)。
- -o parent=ens192:指定要使用的父接口(网卡名称)。
- ipv6ipvlan:要创建的 Docker 网络名称。
测试 IpVlan 网络
ipvlan 使用了宿主机子网网段,建议在容器中指定 ip 地址。
使用 centos 镜像测试:
1 | # 创建 CentOS 镜像 |
正常情况下,容器已经能 ping 通各个地址。
此时,在其它网络设备也能 ping 通测试容器的 ip 地址 192.168.1.10
。
注意:宿主机和容器之间不能 ping 通。
打通宿主机和容器之间的互访
创建虚拟接口桥接到物理网卡打通宿主机和容器之间互访。
1 | # 添加一个虚拟接口桥接到物理网卡 |
参数说明:
- ipvlan-proxy:虚拟接口名称。
- ens192:物理网卡名称。
- 192.168.1.11/32:给虚拟接口分配的 ip 地址。
- 192.168.1.10/32:需互访的容器 ip 地址。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AiKIKI!