对于CentOS 6和LXC,“ifconfig”无法看到networking接口(但busybox“ifconfig”工作正常)

我刚刚在CentOS 6下开始使用LXC(通过libvirt适配器)。 如果我创build一个LXC容器,在使用本地系统工具时,我无法看到任何networking接口:

# ifconfig -a # 

这种行为很奇怪, 通过名称指定接口既不会产生预期的输出,也不会产生错误消息。 即使对于明显无效的接口名称也是如此,如下所示:

 # ifconfig foo # 

ip命令performance出相同的行为。

另一方面,如果我使用busybox提供的“ifconfig”,一切都按预期工作:

 # busybox ifconfig -a eth0 Link encap:Ethernet HWaddr 52:54:00:E0:12:C8 inet6 addr: fe80::5054:ff:fee0:12c8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:268 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:17814 (17.3 KiB) TX bytes:552 (552.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:16436 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) 

那么… busybox知道原生工具不是什么? 这个环境的libvirtconfiguration非常标准, networking定义如下所示:

 <interface type='network'> <mac address='52:54:00:e0:12:c8'/> <source network='default'/> <target dev='veth0'/> </interface> 

完整的configuration在这里,如果你认为它可能有帮助。

我在跑:

  • LXC-0.7.2-2.el6.x86_64
  • 内核2.6.32-71.29.1.el6.x86_64

编辑

Weirder和Weirder …这是一个显示问题,而不是function问题。 我可以看到ifconfig的输出,如果我把它pipe到任何东西,所以例如:

 # ifconfig eth0 | cat eth0 Link encap:Ethernet HWaddr 52:54:00:E0:12:C8 inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::5054:ff:fee0:12c8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:573 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:37914 (37.0 KiB) TX bytes:552 (552.0 b) 

事实上,即使不输出输出, strace显示ifconfig实际上是将输出写入文件描述符1(又名stdout ),所以不清楚为什么没有输出显示出来。 这可能是一个LXC或virsh问题,我猜。

通常情况下,这种事情发生,显然是失败的程序试图更聪明 ,通过查询terminal驱动程序的大小,当它设置不正确或只是0(看stty -a),或使用terminfo但不正确的$ TERM或$ LC_ *variables(尝试运行env),或者在一些奇怪的情况下,一些缓冲区正在被使用吞吞没有填充缓冲区的数据。 在ifconfig和busybox版本上运行strace可能会很有趣。 正常的Linux ifconfig对于这种事情真的是多余的 – 它所做的一切就是访问语言环境信息。