我正在尝试拥有一个CentOS
带有两个网络接口的容器。在浏览了 Docker 文档并“搜索”了一下之后,我发现了这个 GitHub 问题评论,它指定了如何实现这一点。
在它之后,我创建了一个新网络(默认类型bridge
:)
docker network create my-network
检查新网络,我可以看到 Docker 将其分配给了 subnetwork172.18.0.0/16
和 gateway 172.18.0.1/16
。
然后,在创建容器时,我专门附加了新网络:
docker create -ti --privileged --net=my-network --mac-address 08:00:AA:AA:AA:FF <imageName>
在容器内部,我可以检查ifconfig
该 IP 和 MAC 地址是否存在接口:
eth0 Link encap:Ethernet HWaddr 08:00:AA:AA:AA:FF
inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::a00:aaff:feaa:aaff/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:258 (258.0 b) TX bytes:258 (258.0 b)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
当我将容器连接到默认的 Docker 网络(bridge0
又名bridge
)时,问题就来了:
docker network connect bridge <my-container>
现在检查容器中的接口:
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:17 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2941 (2.8 KiB) TX bytes:508 (508.0 b)
eth1 Link encap:Ethernet HWaddr 08:00:AA:AA:AA:FF
inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::a00:aaff:feaa:aaff/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:17 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2941 (2.8 KiB) TX bytes:508 (508.0 b)
我的新网络的接口被移动到eth1
,同时默认网络的接口被移动eth0
。
另外,在检查接口的配置文件时(/etc/sysconfig/network-scripts/ifcfg-eth0
),我可以看到那里指定的 MAC 地址与我在运行容器时手动设置的地址不同08:00:AA:AA:AA:FF
(
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="52:54:00:85:11:33"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
MTU="1500"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="25016937-1ff9-40d7-b4c3-18e08af0f98d"
里面
/etc/sysconfig/network-scripts
只有. (新添加的接口)eth0
的文件丢失。eth1
由于我所涉及的工作的要求,我需要始终禁用第一个接口,并且必须专门设置其 MAC 地址。
任何其他与网络相关的工作都必须通过新连接的 NIC。
我的问题是:
如何将新的 NIC 附加到容器,以便eth0
获得所需的 MAC 地址。
在图像级别执行此操作也很好。