Docker如何为容器分配MAC地址?

mon*_*ica 25 containers docker

当我启动新容器时,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": ""
            }
Run Code Online (Sandbox Code Playgroud)

Osc*_*vis 49

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

不知道为什么他们使用那个mac地址.它似乎02:42:ac与oui数据库中的任何真实供应商都不匹配.请查看有关此内容的官方文档.他们说:

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

无论如何,您可以使用--mac-addressdocker run命令中的参数在容器生成上设置任何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认同)