我编写了一些脚本来管理 LXC 容器,并且我可以通过 ifconfig 获取它们的 IP 地址,假设我已连接到控制台。
我现在想通过 ssh 连接到这些容器。我如何才能通过编写脚本的方式获取它们的 IP 地址?我也不想手动设置地址(但如果这是唯一的选择,我会这样做)。
到目前为止,我已经尝试使用lxc-start
,但是在运行之前机器没有 IP 地址/sbin/init
。
答案1
目前最简单的方法是:
lxc-info -n container-name -iH
这将返回 IP 地址,不包含任何其他文本。
该-i
选项指定应返回 IP 地址,并且该-H
选项禁用人类可读的输出,即标签。有关更多信息,请参阅 lxc-info手册页。
编辑新版本的LXC:
lxc info container-name
然后您将获得详细信息。查看“Ips:”块,它应该如下所示。10.121.48.241
在这种情况下,您可能需要获取第一个 IPv4 地址 ():
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
答案2
鉴于 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
答案3
从技术上讲,您应该能够使用lxc-attach
它来连接并触发命令(并处理输出),如下所示:
sudo lxc-attach --name containername -- ifconfig
这需要容器正在运行。
注意:我无法让它工作。我安装了 LXC 并尝试了它,但只看到一堆命名空间错误、缺少文件和其他无用的东西。但我对 LXC 的唯一经验是我在这个问题上花费的 10 分钟。它可能有效。也可能无效。祝你好运!
答案4
或者查询 dnsmasq(为容器提供 IP)
dig @10.0.3.1 $container-name +short