获取 Docker 容器的 IP 地址
本教程演示如何获取 Docker 容器 IP 地址的 IP 地址。
连接到 Bridge 网络并获取 Docker 容器的 IP 地址
docker 容器如此方便的重要原因之一是我们可以轻松地连接它们。这允许容器通信并轻松共享资源。
我们还可以将容器连接到无 docker 工作负载。
这篇文章不是关于 docker 网络的;因此,我们不会深入研究 docker 网络的细节。但是,docker 提供了各种驱动程序,使用桥驱动程序使网络可插入。
Docker 允许我们使用其默认驱动程序(称为桥接驱动程序)创建网络。但是,桥接网络是私有的,其范围仅限于主机上的容器。
你可以查看主机上的默认网络以及你之前拥有的网络。每个 docker 安装通常包括如下所示的三个默认网络。
isaac@DESKTOP-HV44HT6:~$ docker network lsNETWORK ID NAME DRIVER SCOPE9729860fa596 bridge bridge local0667c3f7d0f0 host host localc3273b158256 none null local
除非另有说明,否则 Docker 将始终在桥接网络中启动新容器。
容器 IP 地址是联网 docker 容器的重要组成部分。通常,容器会为它们连接的每个网络分配一个 IP 地址。
另一方面,你也可以使用以下命令手动将 docker 容器连接到桥接网络。
$ docker run -dt rabbitmq
这将创建一个 docker 容器并将其分配给桥接网络。在我们可以检查网络以确认它是否已连接到它之前,我们应该首先确保容器正在运行。
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES42487cad0390 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 nginx4ab752ab92582a0eb2cb14475094460fc8cc608c93a357a8dca082cfea2bc368
现在,如果我们检查桥接网络,我们将能够获得两个容器的 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/16
和 172.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 容器的有趣内容。