docker默认桥接网络不支持dhcp服务,因其ip分配由守护进程静态完成,无dhcp组件;需dhcp时应改用host/macvlan模式配合外部dhcp服务器或专用容器如docker-pi-hole。

Docker 默认桥接网络(bridge)本身不提供 DHCP 服务,它只是通过宿主机上的 docker0 网桥为容器分配 IP,这个过程由 Docker 守护进程内部完成,不依赖外部 DHCP 服务器,也不开放配置接口。也就是说:你不能在默认 bridge 网络里“写 DHCP 配置”——它压根没这功能。
为什么默认 bridge 没有 DHCP 配置项?
Docker 的默认桥接网络使用静态子网(如 172.17.0.0/16),容器 IP 由 Docker Daemon 在启动时直接分配,不经过 DHCP 协议。它没有 DHCP 服务组件,也不监听或转发 DHCP 请求。
- IP 分配是内建逻辑,非 DHCP 协商
- 没有
dhcpd或类似服务运行在docker0上 -
docker network inspect bridge中看不到 DHCP 范围、租期等字段
想用 DHCP?得换思路:用自定义 bridge + 外部 DHCP 服务
如果你真需要 DHCP 功能(比如让容器从统一 DHCP 服务器获取地址、配合 Pi-hole 或 dnsmasq 管理),必须绕过默认 bridge,改用以下方式之一:
-
方案一:用 docker-pi-hole 的 DHCP 模块(推荐家庭场景)
它不是给 Docker 容器发 DHCP,而是给局域网终端(手机、电脑)发——此时需把 Pi-hole 容器设为host网络模式,并启用DHCP_ACTIVE=true等环境变量,让它直接接管局域网 DHCP 服务 -
方案二:在宿主机部署 dnsmasq 或 isc-dhcp-server
配置它监听物理网卡(如eth0),为整个局域网分配 IP;Docker 容器若走host模式或macvlan模式,就能拿到这个 DHCP 分配的地址 -
方案三:用 macvlan 网络直连物理网段
创建 macvlan 网络并指定parent=eth0,容器获得与宿主机同网段的 IP,自然可接受局域网 DHCP 服务器下发的地址(前提是 DHCP 服务器允许该网段请求)
自定义 bridge 网络能配 DHCP 吗?
不能。即使你用 docker network create --subnet=192.168.100.0/24 创建了自定义 bridge,Docker 仍然只做静态 IP 分配(启动时指定 --ip)或自动递增分配(无 --ip 时),不内置 DHCP 服务。它的 IPAM(IP 地址管理)模块不支持 DHCP 协议。
- 你可以用
--ip给容器固定地址,但这是静态绑定,不是 DHCP - 所有 bridge 类型网络(默认或自定义)都只支持 IPAM 静态分配或简单递增,无 DHCP server 功能
- 想实现 DHCP,必须引入外部服务,且容器网络模式需支持二层接入(如 host/macvlan)
一句话总结
Docker 桥接网络本身没有 DHCP 配置入口——它不提供、也不支持 DHCP 服务。需要 DHCP 时,要么让容器脱离 bridge 模式(用 host/macvlan 接入真实网络并由外部 DHCP 服务器管理),要么用像 docker-pi-hole 这类集成 DHCP 的专用容器替代传统路由器功能。











