Docker 容器里查询端口

简介

Docker 是一种流行的容器化平台,可以帮助用户轻松地打包、分发和运行应用程序。在 Docker 中,容器是一个独立的、可执行的软件包,包含应用程序以及运行该应用程序所需的所有依赖项、库和配置文件。在容器中,可以运行多个服务或应用程序,并且每个服务或应用程序都可以监听不同的端口。

本文将介绍如何在 Docker 容器中查询正在监听的端口,并提供相应的代码示例。

查询容器端口的方法

有多种方法可以查询正在运行的容器中的端口信息。下面我们将介绍其中两种常用的方法。

方法一:使用 docker ps 命令

docker ps 命令用于列出当前正在运行的容器。通过结合其他一些选项,可以获取容器的端口信息。

docker ps --format "{{.ID}}\t{{.Names}}\t{{.Ports}}"

上面的命令将输出容器的 ID、名称以及正在监听的端口信息。输出示例如下:

CONTAINER ID        NAMES               PORTS
c1e8f1de72a0        web-server          0.0.0.0:8080->80/tcp
e9a4a6d6f4ab        database            0.0.0.0:3306->3306/tcp

方法二:使用 Docker SDK

Docker SDK 是 Docker 官方提供的用于与 Docker 引擎进行交互的软件开发工具包。使用 Docker SDK,可以通过编程的方式查询容器的信息,包括端口信息。

下面是一个使用 Python 和 Docker SDK 查询容器端口信息的代码示例:

import docker

client = docker.from_env()

containers = client.containers.list()

for container in containers:
    ports = container.attrs['NetworkSettings']['Ports']
    print(f"Container: {container.name}")
    for port in ports:
        if ports[port] is not None:
            print(f"Port: {port} -> {ports[port][0]['HostPort']}")

上面的代码使用了 Docker SDK 提供的 docker.from_env() 方法创建了一个 Docker 客户端实例。然后,通过 client.containers.list() 方法获取当前正在运行的容器列表,并遍历每个容器。对于每个容器,我们使用 container.attrs 属性获取其属性信息,其中包括网络设置信息。通过访问 NetworkSettings 字段中的 Ports 字段,我们可以获取容器正在监听的端口信息。

总结

本文介绍了两种常用的方法来查询 Docker 容器中正在监听的端口信息。通过使用 docker ps 命令或 Docker SDK,我们可以轻松地获取容器的端口信息。这对于排查容器相关问题、检查容器网络配置以及与容器中的服务进行交互非常有用。

使用 Docker 容器的过程中,了解如何查询容器端口信息是非常重要的。希望本文对您有所帮助。

参考资料

  • Docker Documentation: [Docker SDK for Python](
  • Docker Documentation: [docker ps](