具有DHCP分配地址的Docker容器

时间:2018-08-16 08:50:01

标签: docker networking kvm

我有一台正在运行多个虚拟机的服务器。我正在使用Jira安装启动容器,我需要为容器分配与DHCP不同的地址,并且不使用主机IP地址。我是noobie,所以请解释一下

3 个答案:

答案 0 :(得分:0)

您可以使用docker network macvlan驱动程序来实现。根据{{​​3}}:

  

...您可以使用macvlan网络驱动程序为每个容器的虚拟网络接口分配MAC地址,使其看起来像是直接连接到物理网络的物理网络接口。

因此,实质上,虚拟网络接口将使用主机上公开的物理网络接口来通告其自己的虚拟MAC地址。然后将其广播到正在运行DHCP服务器的LAN,并将为虚拟接口分配IP。

实现它的步骤是:

  1. 创建一个使用macvlan驱动程序的docker网络:

    docker network create \
      --driver macvlan \
      --subnet=172.16.86.0/24 \
      --gateway=172.16.86.1  \
      --opt parent=eth0 lan_net
    

    子网和网关将是您的LAN网络(DHCP所在的子网)和网关。 parent选项指定主机上的物理接口,您希望通过该物理接口将虚拟接口公开给LAN网络。

  2. 使用新创建的网络运行容器:

    docker run -it --rm --net=lan_net alpine
    

答案 1 :(得分:0)

在另一个答案中发现,使用macvlan将使容器无法从DHCP获取地址。从DHCP获取地址的功能是实验性的(这是由与docker libnetwork项目相关的人员创建的)

https://gist.github.com/nerdalert/3d2b891d41e0fa8d688c

建议将更改编译到docker二进制文件中,然后运行

docker network create -d macvlan \
  --ipam-driver=dhcp \
  -o parent=eth0 \
  --ipam-opt dhcp_interface=eth0 mcv0

由于这需要重新编译二进制文件,因此另一种解决方案是 使用“ --ip”选项为docker run / compose为您的所有容器分配静态IP地址,并为分配给该IP的主机名获取DNS条目,并确保永远不能通过DHCP分配IP。

答案 2 :(得分:0)

@ ad22的答案中建议的技术要求使用libnetwork分支的Docker引擎的自定义构建。如今,在黑客入侵发生已有四年多的时间了,DHCP功能仍未合并到标准Docker引擎中,而fork却远远落后于主线代码。

自2019年下半年以来,可以使用devplayer0's docker-net-dhcp plugin通过DHCP与Docker容器一起为Docker容器分配IP地址,该{@ 3}}与标准Docker引擎一起使用。创建新容器时,此插件将启动Busybox udhcpc客户端以获取DHCP租约,然后运行udhcpc(在容器的PID名称空间之外的进程中)以根据需要续订租约。