【问题标题】:Can't change mac address of docker containter无法更改docker容器的mac地址
【发布时间】:2015-02-09 15:35:11
【问题描述】:

我已经尝试了以下

docker run -e lxc --lxc-conf="lxc.network.hwaddr=00:0C:29:88:30:CC" -i -t centos ifconfig

但从我的输出中可以看出,它不会更改 mac 地址

eth0: flags=3<UP,BROADCAST>  mtu 1500
    inet 172.17.0.6  netmask 255.255.0.0  broadcast 0.0.0.0
    inet6 fe80::42:acff:fe11:6  prefixlen 64  scopeid 0x20<link>
    ether 02:42:ac:11:00:06  txqueuelen 1000  (Ethernet)
    RX packets 1  bytes 90 (90.0 B)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 1  bytes 90 (90.0 B)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10<host>
    loop  txqueuelen 0  (Local Loopback)
    RX packets 0  bytes 0 (0.0 B)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 0  bytes 0 (0.0 B)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我在 Ubuntu 上运行 docker 1.3 和从 centos7 映像生成的容器

Client version: 1.3.2
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 39fa2fa
OS/Arch (client): linux/amd64
Server version: 1.3.2
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 39fa2fa

如果能帮助我成功更改容器中的 mac 地址,我将不胜感激。

【问题讨论】:

  • 看起来stackoverflow.com/a/18698166/395670 建议使用-e lxc 选项运行docker daemon。不是带有-e lxc 选项的run 命令。 docker run 中的 -e 用于设置环境变量。而上面答案中的-e lxc 是为了指示 docker 使用 lxc 作为执行驱动程序而不是默认的 libcontainer。
  • 改的原因是什么?
  • 根据this pull request,此功能将添加到 1.4 版本中(现在任何一天到期)。 @XavierLucas 对于将其许可证与服务器 MAC 地址绑定的应用程序,我需要它,因此需要容器具有静态地址。
  • 既然1.4出来了,现在就用1.4吗? :)
  • 将 -e lxc 命令移至配置文件并更新至 1.4 版。使用 docker run -i -t --privileged --mac-address=00:0c:29:88:30:cc centos ifconfig 并没有什么区别。还是不行。

标签: docker


【解决方案1】:

如果您查看https://github.com/docker/docker/blob/v1.4.1/vendor/src/github.com/docker/libcontainer/netlink/netlink_linux.go#L528 的 docker 代码,您会发现只接受非广播本地 mac 地址。在https://en.wikipedia.org/wiki/MAC_address 中搜索“组织唯一标识符”以获取解释。实际上,这意味着 MAC 的第二个字符必须是 2、6、A 或 E。

如果您运行docker run --mac-address=00:0C:29:88:30:CC centos ifconfig,您应该会看到来自上述代码的错误消息。

【讨论】:

    【解决方案2】:

    我这样做的方式是在特权模式下运行容器,然后在容器中运行 ifconfig 来设置它。但是,如果您正在寻找一种可以让您在运行命令中执行此操作的解决方案,我认为您必须等待其他响应...

    【讨论】:

    • 感谢您的回复。如果我使用特权没有区别
    • 我知道,但是你可以在容器内配置你的接口
    【解决方案3】:

    首先,检查您的系统是否有lxc-start 命令? 如果有lxc-start 命令 #stop docker service ,使用命令运行docker service sudo docker -d -e lxc,看看有什么错误报告。 如果没有lxc-start 命令 apt-get install lxc-docker

    【讨论】:

    • 好的,谢谢,我确实安装了 lxc-start 命令和 lxc-docker。仍然没有快乐
    • 你运行的docker是物理机还是虚拟主机?如果是虚拟主机则不可用。至于为什么不可用,和混杂模式有关。
    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2020-01-06
    相关资源
    最近更新 更多