Docker使用局域网DHCP为容器分配IP地址

2023-10-01 01:12:24 3点赞 6收藏 2评论

默认情况下,Docker的容器IP地址是由Docker分配或者在创建容器时指定的。

某些场景下,我们需要把容器部署在局域网内部的网络,比如使用macvlan或者ipvlan网络。

但由局域网内的DHCP服务器为容器分配IP地址,Docker默认情况下是做不到的。

有一个开源Docker插件能帮助我们实现这个功能:devplayer0/docker-net-dhcp: Docker network driver for networking on a host bridge with DHCP-allocated IP addresses (github.com)

支持x86、x64、arm-v7、arm-v8的CPU


安装插件

使用命令行安装Docker插件

docker plugin install ghcr.io/devplayer0/docker-net-dhcp:release-linux-amd64

出现提示时,按y继续安装

Plugin "ghcr.io/devplayer0/docker-net-dhcp:release-linux-amd64" is requesting the following privileges:
- network: [host]
- host pid namespace: [true]
- mount: [/var/run/docker.sock]
- capabilities: [CAP_NET_ADMIN CAP_SYS_ADMIN CAP_SYS_PTRACE] Do you grant the above permissions? [y/N]

查看本地网络

在创建Docker网络前,先使用ifconfig命令查看本地网络,记住你想要部署容器的网络名称

Docker使用局域网DHCP为容器分配IP地址

创建Docker网络

使用以下命令创建网络,

本地网络名称填写上方命令看到的网络名称,例如我这里是br-lan.90

Docker网络名称任意填写不重复的名称,例如app

注意,如果不是x86架构64位CPU,需将amd64替换为:

  • x86架构32位CPU:386

  • ARM架构32位CPU:arm-v7

  • ARM架构64位CPU:arm-v8

docker network create -d ghcr.io/devplayer0/docker-net-dhcp:release-linux-amd64 --ipam-driver null -o bridge=本地网络名称 Docker网络名称

使用IPv6

如果你的网络支持IPv6,插件也是能够支持IPv6的分配的,创建网络的命令有所不同

docker network create -d ghcr.io/devplayer0/docker-net-dhcp:release-linux-amd64 --ipam-driver null -o bridge=本地网络名称 -o ipv6=true Docker网络名称


最后

网络创建好后,在创建容器时,添加参数“--net Docker网络名称”即可使用新创建的网络,使用局域网DHCP服务器分配IP地址

另外,你还可以通过添加参数“--mac-address MAC地址”(例如14:57:da:38:52:2a)指定容器的MAC地址,并在DHCP服务器为该MAC地址分配一个固定IP地址

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起