如何从主机获取 Docker 容器的 IP 地址?


如果您已经使用 Docker 很长时间了,那么您的主机上可能已经运行了大量容器。有时,跟踪所有这些容器变得非常困难。此外,如果您在网络上或使用 compose,网络中可能有多个容器正在运行。在这种情况下,确定哪些容器正在积极运行以及哪些容器已失败非常困难。您可能需要定期 ping 这些容器以检查其状态。为此,您需要拥有容器的 IP 地址。

如果您有容器的名称或 ID,则可以轻松获取任何容器的 IP 地址。您可以使用“Docker ps -a”命令获取容器名称。这将列出所有现有容器。有多种方法可以从主机获取容器的 IP 地址。在本文中,我们将讨论一些简单且常用的方法。

方法 1. 使用 Inspect 命令以及 Format 选项

第一种方法是使用 Docker inspect 命令检查容器,并使用 format 选项仅打印出容器的 IP 地址。让我们看看如何操作。

$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container-ID>

此命令使用 -f 标志,它代表 --format,并使用 Go 模板仅打印容器的 IP。您需要在最后指定容器名称或 ID。

方法 2. 使用 GREP 管道与 Inspect 命令

可以使用上述 Docker inspect 命令的另一个变体来代替使用 format 选项。您可以简单地将 Docker inspect 命令的输出与模式匹配 grep 命令以及“IPAddress”模式一起使用。让我们看看如何操作。

$ docker inspect myubuntu | grep "IPAddress"

此命令将成功打印容器的 IP 地址。

方法 3. 获取所有容器的 IP 地址

如果您想打印所有容器的 IP 地址及其容器名称,则可以使用相同的 Docker inspect 命令以及 format 选项。但是,您可以包含一个返回所有现有容器的容器 ID 的子命令,而不是容器名称。

$ docker inspect -f '{{.Name}}-{{.NetworkSettings.IPAddress }}' $(docker ps -aq)

子命令 docker ps -aq 列出所有容器的容器 ID。这作为参数传递给父 Docker inspect 命令。

方法 4. 在 Docker Compose 中列出所有容器的 IP 地址

如果您使用 Docker compose,则可以使用以下命令列出 compose 网络中所有现有容器的 IP 地址。

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

方法 5. 使用 Bash 脚本列出 IP 地址

您还可以使用 bash 脚本创建列出所有容器的 IP 地址的函数。只需将以下代码段添加到您的 ~/.bashrc 文件中即可。

docker-ip() {
   docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

现在,如果您想获取 IP 地址,可以在终端中使用以下命令。

$ docker-ip <container-name>

方法 6. 以表格格式列出 IP

如果您想以表格格式列出 IP 地址,请使用下面提到的命令。

$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} %tab% {{.Name}}' $(docker ps -aq
) | sed 's#%tab%#\t#g' | sed 's#/##g' | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n

总而言之,在本文中,我们讨论了如何使用 6 种不同的方法检索主机或 compose 网络中一个或所有容器的 IP 地址。您可以根据您的需要使用其中任何一种。

更新于: 2021 年 8 月 6 日

9K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告