具有 DHCP 分配地址的 Docker 容器

Fix*_*xeR 6 networking kvm docker

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

200*_*ess 12

ad22 的答案中建议的技术需要使用 libnetwork 分支自定义构建 Docker 引擎。现在,距离该 hack 开发已有四年多了,DHCP 功能仍然没有合并到标准 Docker 引擎中,并且分支已经远远落后于主线代码。

自 2019 年底以来,可以使用devplayer0 的docker-net-dhcp插件通过 DHCP 为 Docker 容器分配 IP 地址,该插件与标准 Docker 引擎配合使用。当您创建新容器时,此插件会启动 Busybox udhcpc 客户端来获取 DHCP 租约,然后运行 ​​udhcpc(在容器 PID 命名空间之外的进程中)以根据需要续订租约。


moe*_*ius -2

您可以使用 docker 网络macvlan驱动程序来实现此目的。根据文档

\n\n
\n

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

\n
\n\n

因此本质上,虚拟网络接口将使用主机上暴露的物理网络接口来通告自己的虚拟MAC地址。然后,该信息将被广播到运行 DHCP 服务器的 LAN,并且虚拟接口将被分配一个 IP。

\n\n

让它运行的步骤是:

\n\n
    \n
  1. 创建使用驱动程序的 docker 网络macvlan

    \n\n
    docker network create \\\n  --driver macvlan \\\n  --subnet=172.16.86.0/24 \\\n  --gateway=172.16.86.1  \\\n  --opt parent=eth0 lan_net\n
    Run Code Online (Sandbox Code Playgroud)\n\n

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

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

    \n\n
    docker run -it --rm --net=lan_net alpine\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
\n

  • 我已经尝试过了,但这并没有从 DHCP 获取 IP 地址。它仅分配与网络中相同的地址,但这些地址对网络中的其他主机不可见 (2认同)