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

Ste*_*zzo 19 12.04 lxc

我编写了一些脚本来管理 LXC 容器,假设我已连接到控制台,我可以通过 ifconfig 获取它们的 IP 地址。

我现在想通过 ssh 连接到这些容器。如何以可以编写脚本的方式获取他们的 IP 地址?我也不想手动设置地址(但我会这样做,如果这是唯一的选择)。

到目前为止,我已经尝试过使用lxc-start,但是在我运行之前机器没有 IP 地址/sbin/init

Oli*_*Oli 10

鉴于 Ubuntu 似乎不支持在容器中运行的东西,我的下一个最佳建议是查看dnsmasq分发的 IP 地址租约。这真的很简单:

$ cat /var/lib/misc/dnsmasq.leases
1363699477 00:16:3e:4a:ce:a4 10.0.3.83 containername *
Run Code Online (Sandbox Code Playgroud)

只有两部分是有用的,所以我们可以更好地格式化它:

$ awk '{ print $4,$3 }' /var/lib/misc/dnsmasq.leases | column -t
containername  10.0.3.83
Run Code Online (Sandbox Code Playgroud)

  • 供参考:LXC 的新版本(即 Raring 中的版本)在 `lxc-ls --fancy` 的输出中显示了 IP 地址。 (2认同)

小智 10

现在最简单的方法是:

lxc-info -n container-name -iH
Run Code Online (Sandbox Code Playgroud)

这将返回没有其他文本的 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
Run Code Online (Sandbox Code Playgroud)


Oli*_*Oli 7

从技术上讲,您应该能够lxc-attach在命令中使用连接和触发(并处理输出),如下所示:

sudo lxc-attach --name containername -- ifconfig
Run Code Online (Sandbox Code Playgroud)

这需要容器正在运行。

注意:我无法让它工作。我安装了 LXC 并尝试了这个,但只是看到了大量的命名空间错误、丢失的文件和其他废话。但我对 LXC 的唯一体验是我在这个问题上花费的 10 分钟。它可能会起作用。可能不会。祝你好运!


vaa*_*aab 5

这适用于 Ubuntu 14.04:

lxc-info -n $name -i
Run Code Online (Sandbox Code Playgroud)

如果您只想要 IP 地址(对脚本有用),(感谢 @JulianHlam):

lxc-info -n $name -iH
Run Code Online (Sandbox Code Playgroud)