LOADING

加载过慢请开启缓存 浏览器默认开启

docker配置容器与宿主机在同一网段

0 前置要求

1 原理解释

macvlan 是一种网络虚拟化技术,它允许在物理网络接口上创建多个虚拟网络接口,每个接口都有独立的 MAC 地址和 IP 地址。主要特点:

  • 每个虚拟接口都有独立的 MAC 地址
  • 支持直接配置 IP 地址
  • 实现容器间的网络隔离和通信
  • 适用于需要容器与宿主机在同一网段的场景

2 配置步骤

查看宿主机网络信息

输入

ip a

输出

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:62:2f:df brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.0.4/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe62:2fdf/64 scope link
       valid_lft forever preferred_lft forever

其中 ens33 是我们的目标挂载网卡的名称,192.168.0.4 是宿主机的 IP 地址,子网掩码为 24 位。

创建 Docker 网络

docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=ens33 docker-macvlan

参数说明:

  • –subnet :指定网络子网
  • –gateway :设置网关地址
  • -o parent :指定父网络接口
  • docker-macvlan :网络名称

为容器配置 IP 地址

这里我们使用 Nginx 镜像进行试验,如果你没有下载 Nginx 镜像,可以使用以下命令下载:

docker pull nginx

然后使用以下命令创建容器

docker run --name nginx-server --net docker-macvlan --ip 192.168.0.99 -d nginx

3 测试

宿主机 ping 通容器

在其余任一一个非宿主机且和宿主机相互能 ping 通的机器上,都可以 ping 通容器的 IP 地址。
输入

ping 192.168.0.99

输出

正在 Ping 192.168.0.99 具有 32 字节的数据:
来自 192.168.0.99 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.0.99 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.0.99 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.0.99 的回复: 字节=32 时间<1ms TTL=64

192.168.0.99 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 1ms,平均 = 0ms

注意事项