獲取 Docker 容器的 IP 地址

Isaac Tony 2023年1月30日 2022年4月20日
  1. 連線到 Bridge 網路並獲取 Docker 容器的 IP 地址
  2. 使用 docker inspect 獲取 Docker 容器的 IP 地址
獲取 Docker 容器的 IP 地址

本教程演示如何獲取 Docker 容器 IP 地址的 IP 地址。

連線到 Bridge 網路並獲取 Docker 容器的 IP 地址

docker 容器如此方便的重要原因之一是我們可以輕鬆地連線它們。這允許容器通訊並輕鬆共享資源。

我們還可以將容器連線到無 docker 工作負載。

這篇文章不是關於 docker 網路的;因此,我們不會深入研究 docker 網路的細節。但是,docker 提供了各種驅動程式,使用橋驅動程式使網路可插入。

Docker 允許我們使用其預設驅動程式(稱為橋接驅動程式)建立網路。但是,橋接網路是私有的,其範圍僅限於主機上的容器。

你可以檢視主機上的預設網路以及你之前擁有的網路。每個 docker 安裝通常包括如下所示的三個預設網路。

isaac@DESKTOP-HV44HT6:~$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
9729860fa596   bridge    bridge    local
0667c3f7d0f0   host      host      local
c3273b158256   none      null      local

除非另有說明,否則 Docker 將始終在橋接網路中啟動新容器。

容器 IP 地址是聯網 docker 容器的重要組成部分。通常,容器會為它們連線的每個網路分配一個 IP 地址。

另一方面,你也可以使用以下命令手動將 docker 容器連線到橋接網路。

$ docker run -dt rabbitmq

這將建立一個 docker 容器並將其分配給橋接網路。在我們可以檢查網路以確認它是否已連線到它之前,我們應該首先確保容器正在執行。

$ docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED              STATUS              PORTS                                                 NAMES
42487cad0390   rabbitmq   "docker-entrypoint.s…"   About a minute ago   Up About a minute   4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp   compassionate_keller

檢查橋接網路將允許我們檢視連線到網路的容器,以及其他詳細資訊,例如容器的 IP 地址和容器的預設子網。詳細資訊以 JSON 格式返回,如下所示。

~$ docker network inspect bridge

輸出:

"ConfigOnly": false,
        "Containers": {
            "42487cad0390a8de6d1a88bc1d6c09ffdf3162dc85d4d5d3dc70200b2348b673": {
                "Name": "compassionate_keller",
                "EndpointID": "ffa55232565d3a32d1e471d0753c1f491d6131a5cca50b8b76bc43a8ff554e32",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/16",
                "IPv6Address": ""
            }

上例中我們容器的 IP 地址是 172.17.0.4/16。

我們也可以有多個容器連線到網路,我們可以通過檢查橋接網路輕鬆找到兩者的 IP 地址。如下圖,我們在 bridge 網路中新增一個基於 Nginx 映象的容器。

isaac@DESKTOP-HV44HT6:~$ docker run -dt nginx
4ab752ab92582a0eb2cb14475094460fc8cc608c93a357a8dca082cfea2bc368

現在,如果我們檢查橋接網路,我們將能夠獲得兩個容器的 IP 地址。請記住,這兩個容器應該正在執行。

isaac@DESKTOP-HV44HT6:~$ docker network inspect bridge

輸出:

"Containers": {
            "42487cad0390a8de6d1a88bc1d6c09ffdf3162dc85d4d5d3dc70200b2348b673": {
                "Name": "compassionate_keller",
                "EndpointID": "ffa55232565d3a32d1e471d0753c1f491d6131a5cca50b8b76bc43a8ff554e32",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/16",
                "IPv6Address": ""
            },
            "4ab752ab92582a0eb2cb14475094460fc8cc608c93a357a8dca082cfea2bc368": {
                "Name": "trusting_keller",
                "EndpointID": "a2babd11586f493cf5e57f5d9920a7f5648cf6163e77030521bef62fc9f34a63",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        }

兩個容器的 IP 地址按建立順序分別為 172.17.0.4/16172.17.0.2/16

使用 docker inspect 獲取 Docker 容器的 IP 地址

我們還可以使用 docker inspect 和容器名稱或容器 id 來查詢特定 Docker 容器的 IP 地址。這同樣會以 JSON 格式返回許多其他詳細資訊。

$ docker inspect 42487cad0390

輸出:

"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "9729860fa5961eeac55f921ee787b2c82a15146cd36117b5394243be2149e929",
                    "EndpointID": "ffa55232565d3a32d1e471d0753c1f491d6131a5cca50b8b76bc43a8ff554e32",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:04",
                    "DriverOpts": null
                }
            }

在這種情況下,我們已經根據官方 Nginx 映象檢查了容器。你可以參考 Docker 文件,瞭解有關聯網 Docker 容器的有趣內容。

Author: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

相關文章 - Docker Container