如何從主機獲取 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 地址。您可以根據您的需要使用其中任何一種。