问题描述
我编写了一些脚本来管理 LXC 容器,假设我已连接到控制台,我可以通过 ifconfig 获取它们的 IP 地址。
我现在想通过 ssh 连接到这些容器。如何以可以编写脚本的方式获取他们的 IP 地址?我也不想手动设置地址(但我会这样做,如果这是唯一的选择)。
到目前为止,我已经尝试使用 lxc-start
,但在运行 /sbin/init
之前机器没有 IP 地址。
最佳回答
现在最简单的方法是:
lxc-info -n container-name -iH
这将返回 IP 地址,没有其他文本。
-i
选项指定应返回 IP 地址,-H
选项禁用人类可读的输出,即标签。有关更多信息,请参阅 lxc-info man page 。
编辑新版本的 LXC:
lxc info container-name
然后你会得到详细的信息。查看 “Ips:” 块,它应该如下所示。在这种情况下,您可能会获取第一个 IPv4 地址 ( 10.121.48.241
):
Ips:
eth0: inet 10.121.48.241 vethSBP4RR
eth0: inet6 fda5:b9a9:f3b9:ba32:216:3eff:fe4a:4d7d vethSBP4RR
eth0: inet6 fe80::216:3eff:fe4a:4d7d vethSBP4RR
lo: inet 127.0.0.1
lo: inet6 ::1
次佳回答
鉴于 Ubuntu 似乎不支持在容器中运行,我的下一个最佳建议是查看 dnsmasq
分发的 IP 地址租约。这真的很简单:
$ cat /var/lib/misc/dnsmasq.leases
1363699477 00:16:3e:4a:ce:a4 10.0.3.83 containername *
那里只有两个部分是有用的,所以我们可以更好地格式化它:
$ awk '{ print $4,$3 }' /var/lib/misc/dnsmasq.leases | column -t
containername 10.0.3.83
第三种回答
从技术上讲,您应该能够使用 lxc-attach
连接并在命令中触发(并处理输出),如下所示:
sudo lxc-attach --name containername -- ifconfig
这需要容器正在运行。
注意:我无法让它工作。我安装了 LXC 并尝试了这个,但只看到了一堆命名空间错误、丢失文件和其他废话。但我对 LXC 的唯一体验是我在这个问题上花了 10 分钟。它可能会起作用。可能不会。祝你好运!
第四种回答
这适用于 Ubuntu 14.04:
lxc-info -n $name -i
如果您只想要 IP 地址(对脚本有用),(感谢 @JulianHLam):
lxc-info -n $name -iH
第五种回答
或者查询 dnsmasq (它为容器提供 IP)
dig @10.0.3.1 $container-name +short