如何获取 LXC 容器的 IP 地址?

如何获取 LXC 容器的 IP 地址?

我编写了一些脚本来管理 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

相关内容