如何为 Docker LXC 容器设置 MAC 地址?

Posted

技术标签:

【中文标题】如何为 Docker LXC 容器设置 MAC 地址?【英文标题】:How to set the MAC address for Docker LXC containers? 【发布时间】:2013-08-31 00:22:22 【问题描述】:

每当我运行 docker 容器时,我都会看到它使用随机 MAC 地址:

eth0      Link encap:Ethernet  HWaddr de:6f:de:74:bd:d9

如何为容器运行设置特定的 MAC 地址?

我能否让多个容器同时使用相同的 MAC 地址运行?这些容器不需要访问外网,也不需要相互通信。

【问题讨论】:

马上,想到的第一个问题是为什么?您在某处是否有某种过滤或基于 MAC 的访问控制设置?您要实现的实际业务目标是什么? 是的,我的服务允许用户从网络浏览器运行工具。为了安全起见,我使用 Docker 容器运行这些工具。其中一个工具需要绑定到特定的 MAC 地址,因此我需要以某种方式限制 MAC 地址随机化。 【参考方案1】:

较新版本的docker 需要将--mac-address=12:34:56:78:9a:bc 切换到docker run

root@kevin-VirtualBox:~# sudo docker run --rm --mac-address"=12:34:de:b0:6b:61" ubuntu ifconfig | grep HWaddr
eth0      Link encap:Ethernet  HWaddr 12:34:de:b0:6b:61  

见https://docs.docker.com/reference/run/

【讨论】:

mac 选项应该是:--mac-address="12:34:de:b0:6b:61"? 您对报价有疑问吗?它们是不必要但无害的。 这是正确的答案,应该被接受。接受的答案在 docker 17.03 上不起作用。 $ docker run -it --rm --mac-address"=92:20:de:b0:6b:61" ubuntu:16.04 bash root@cb8c4f4260df:/# cat /sys/class /net/eth0/地址 92:20:de:b0:6b:61【参考方案2】:

上面的答案对我有用,对我帮助很大,但我需要更多细节才能让它发挥作用。 当您有一个许可 MAC 地址的应用程序时,这非常有用。 由于这是我能找到的关于这个主题的唯一帖子,我想我会扩展它。

对我来说,它需要更多的工作 - 否则开关将被默默地丢弃。 对于 ubuntu 12.04:

    编辑 /etc/default/docker: DOCKER_OPTS="--dns 8.8.8.8 -e lxc" apt-get install lxc(lxc-docker不够用) docker run --lxc-conf="lxc.network.hwaddr=92:20:de:b0:6b:61" -t myimage

【讨论】:

【参考方案3】:

使用 LXC 配置选项 lxc.network.hwaddr 设置 MAC 地址。 以下是如何使用 Docker 0.6.1 设置 MAC 地址的示例:

docker run --lxc-conf="lxc.network.hwaddr=92:20:de:b0:6b:61" my_image ifconfig

在输出中,您将看到设置的 HWaddr:

eth0      Link encap:Ethernet  HWaddr 92:20:de:b0:6b:61

更新:

之前的开关 -lxc-conf(带有 1 个破折号)已被弃用。

要使用上述开关,您的 docker 必须使用 LXC 驱动程序:-e lxc

【讨论】:

请教如何使用-e变量设置mac地址,谢谢

以上是关于如何为 Docker LXC 容器设置 MAC 地址?的主要内容,如果未能解决你的问题,请参考以下文章

LXC---Docker的“前身”

如何在Ubuntu上创建及管理LXC容器

如何在Ubuntu上创建及管理LXC容器

Proxmox VE LXC容器上运行Docker

Docker初学乍练之基础入门

Docker实践