【问题标题】:How does the Docker assign MAC addresses to containers?Docker 如何为容器分配 MAC 地址?
【发布时间】:2017-03-22 08:38:40
【问题描述】:

当我启动新容器时,Docker 会自动为它们分配一些 MAC 地址。我很好奇这个作业是否有规律。 MAC地址可以改吗?

$ docker network inspect bridge

"Containers": {
            "3386a527aa08b37ea9232cbcace2d2458d49f44bb05a6b775fba7ddd40d8f92c": {
                "EndpointID": "647c12443e91faf0fd508b6edfe59c30b642abb60dfab890b4bdccee38750bc1",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "94447ca479852d29aeddca75c28f7104df3c3196d7b6d83061879e339946805c": {
                "EndpointID": "b047d090f446ac49747d3c37d63e4307be745876db7f0ceef7b311cbba615f48",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }

【问题讨论】:

    标签: docker containers


    【解决方案1】:

    Docker 开始为第一个容器分配始终相同的 mac 02:42:ac:11:00:02,然后为每个不同的容器增加一个 mac。

    不确定他们为什么使用那个 mac 地址。 02:42:ac 似乎与 oui 数据库中的任何真实供应商都不匹配。看看official documentation 关于这个。他们说:

    使用分配给容器的 IP 地址生成 MAC 地址以避免 ARP 冲突,使用范围从 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff

    无论如何,您可以使用 docker run 命令上的--mac-address 参数在容器生成时设置任何 MAC 地址。例如执行这样的命令docker run -ti --mac-address 00:00:00:00:00:11 ubuntu:trusty

    希望对你有帮助。

    【讨论】:

    • 非常感谢!这正是我想要的。
    • “似乎 02:42:ac 与 oui 数据库中的任何真实供应商都不匹配”。 MAC 地址的第一个八位字节中的位 0x02 表示它是“本地管理的”,因此永远不会在供应商 OUI 中设置它。这保证了 docker 分配的 MAC 不会与物理网络接口的 MAC 地址发生冲突。我只能猜测第二个八位字节中的00x42 是干什么用的(生命宇宙和一切?)。正如@Norbert 在他的回答中指出的那样,第三个八位字节 (0xac) 取自 IP 地址的第一个八位字节 - 172。
    【解决方案2】:

    如果查看容器接口的 MAC 地址,您会发现最后 4 个八位字节是 IPv4 地址的十六进制表示。这部分以02:42:为前缀 例如:-

    Docker 生成的容器接口的 MAC 地址与 IPv4 地址为172.19.0.6 将是02:42:ac:13:00:06

    【讨论】:

    • 感谢您指出这一点 - 我试图弄清楚“MAC 地址是使用分配给容器的 IP 地址生成的”这句话的确切含义。
    猜你喜欢
    • 2013-09-15
    • 2013-08-31
    • 2023-02-03
    • 2021-07-21
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2021-11-23
    相关资源
    最近更新 更多