如果您现在使用 Docker 已经很长时间了,您的主机中可能已经有很多容器在运行。有时,跟踪所有这些容器变得非常困难。此外,如果您在网络上或使用 compose,则可能有多个容器在网络内运行。在这种情况下,确定哪个容器正在运行,哪个失败了,是非常困难的。您可能需要定期 ping 这些容器以检查它们的状态。为此,您需要拥有容器的 IP 地址。
如果您有容器的名称或 ID,则可以轻松获取任何容器的 IP 地址。您可以使用“ Docker ps -a ”命令获取容器名称。这将列出所有现有的容器。有多种方法可以从主机获取容器的 IP 地址。在本文中,我们将讨论一些简单且常用的方法。
第一种方法是使用 Docker inspect 命令检查容器并使用 format 选项仅打印出容器的 IP 地址。让我们看看如何做到这一点。
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container-ID>
此命令使用代表 --format 的 -f 标志并使用 Go-template 仅打印容器的 IP。您需要在末尾指定容器名称或 ID。
可以使用上述 Docker inspect 命令的另一个变体来代替使用 format 选项。您可以简单地将 Docker inspect 命令的输出与模式匹配的 grep 命令与模式“IPAddress”进行管道传输。让我们看看如何做到这一点。
$ docker inspect myubuntu | grep "IPAddress"
此命令将成功打印容器的 IP 地址。
如果要打印所有容器的 IP 地址及其容器名称,可以使用带有 format 选项的相同 Docker inspect 命令。但是,您可以包含一个子命令,而不是容器名称,该子命令返回所有现有容器的容器 ID。
$ docker inspect -f '{{.Name}}-{{.NetworkSettings.IPAddress }}' $(docker ps -aq)
子命令docker ps -aq列出所有容器的容器 ID。这作为参数传递给父 Docker 检查命令。
如果您使用 Docker compose,则可以使用以下命令列出 compose 网络中所有现有容器的 IP 地址。
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
您还可以使用 bash 脚本创建一个函数,该函数将列出所有容器的 IP 地址。只需在您的 ~/.bashrc 文件中添加以下代码片段。
docker-ip() { docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@" }
现在,如果您想获取 IP 地址,可以在终端中使用以下命令。
$ docker-ip <container-name>
如果要以表格格式列出 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 种不同的方法检索主机或组合网络中一个或所有容器的 IP 地址。您可以根据需要使用其中任何一种。