英文:
docker compose use ipvlan with static address for a DHCP server
问题 {#heading}
我想运行一个由几个容器组成的docker-compose,其中一个容器应该充当DHCP服务器,并为连接到docker-compose主机接口之一的一个桥接的设备分配IP地址。
我认为我可以使用macvlan或ipvlan,我更喜欢后者,ipvlan似乎能够完全满足我的需求,唯一的例外是这个网关/ip范围的问题。
我有点困惑为什么它们首先是必需的,我只想为容器接口分配一个静态IP地址,并让DHCP服务器在该接口上侦听。我开始质疑ipvlan/macvlan是否是正确的解决方案。
简而言之,是否有一种方法可以为ipvlan接口分配静态IP地址?我在互联网上找到了一些解决方案,但在docker-compose v3中没有一个适用。 英文:
I'd like to run a docker-compose made of a few containers one of which should act as a DHCP server and assign IP addresses to a few devices attached to a bridge directly plugged into one of the docker-compose host interface.
I think I could use macvlan or ipvlan - the latter being my preference, ipvlan seems to do exactly what I wish, with the only excpetion of this gateway/ip_range business.
I am a bit confused about why they are needed in the first place, all I'd like to do is to assign a static ip address to the container interface and have the DHCP server listening at that interfacec. I am starting to question myself wether ipvlan/macvlan are the right solution or otherwise.
In short, is there a way to assign a static ip address to a ipvlan interface ? I've found a few solutions over the internet but none works with docker compose v3.
答案1 {#1}
得分: 2
Docker Compose v3 应该允许定义自定义网络插件和配置,包括 Macvlan 和 IPvlan。在 Macvlan 和 IPvlan 之间,后者具有一些优点,例如不需要 MAC 地址,在大规模场景中可能会很有用。
使用 Docker Compose v3 为容器分配静态 IP 也应该很简单。您可以在网络下使用 ipv4_address
设置。
在 Docker Compose 之外创建一个 Docker 网络,例如命名为 ipvlan_net
的 IPvlan 网络,关联到 Docker 主机上的 eth0
接口:
docker network create -d ipvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
ipvlan_net
gateway/ip_range
对于路由是必需的。网关用于转发不用于本地网络的流量。如果您的容器需要访问外部网络或互联网,这变得尤其重要。
然后配置您的 docker-compose.yml
:
version: '3.8'
services:
dhcp-server:
image: your_dhcp_image
networks:
ipvlan_net:
ipv4_address: 192.168.1.10
cap_add:
- NET_ADMIN
networks:
ipvlan_net:
external: true
external
配置 在networks
下确保 Docker Compose 使用预先存在的ipvlan_net
网络。- 请确保分配的静态 IP 地址(在本示例中为
192.168.1.10
)不会与您为 DHCP 租约配置的任何现有地址或范围发生冲突。
英文:
Docker Compose v3 should allow defining custom network plugins and configurations, including Macvlan and IPvlan. Between Macvlan and IPvlan, the latter has advantages such as not needing MAC addresses, which can be useful in large-scale scenarios.
Assigning a static IP to a container using Docker Compose v3 should also be straightforward. You can use the ipv4_address
setting under the network.
Create a Docker network outside of Docker Compose, for instance an IPvlan network named ipvlan_net
, associated with the eth0
interface on the Docker host:
docker network create -d ipvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
ipvlan_net
The gateway/ip_range
is required for routing. The gateway is used to forward traffic that is not destined for the local network. That becomes especially important if your containers need to access external networks or the internet.
Then configure your docker-compose.yml
:
version: '3.8'
services:
dhcp-server:
image: your_dhcp_image
networks:
ipvlan_net:
ipv4_address: 192.168.1.10
cap_add:
- NET_ADMIN
networks:
ipvlan_net:
external: true
- The
external
configuration undernetworks
ensures that Docker Compose uses the pre-existingipvlan_net
network. - Make sure the static IP address assigned (
192.168.1.10
in this example) does not conflict with any existing addresses or ranges you have configured for DHCP lease.