Docker 查看指定端口号

在使用 Docker 运行应用程序时,我们经常需要查看容器中的端口号,以确保应用程序正确地监听了我们期望的端口。本文将介绍如何使用 Docker 命令和 API 查看指定端口号,并提供了一些实际的代码示例来帮助你更好地理解和应用这些技巧。

Docker 命令行工具

Docker 提供了一套命令行工具,可以方便地管理和操作 Docker 容器和镜像。其中,docker ps 命令可以列出当前正在运行的容器。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
7a7c5ea4a7f0        nginx               "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp, 443/tcp   webserver

在上面的示例输出中,我们可以看到一个正在运行的容器,其 ID 为 7a7c5ea4a7f0、镜像为 nginx,监听了主机的 80 端口。

如果我们只关心某个特定容器的端口,可以通过参数 -f 来过滤结果。

$ docker ps -f "name=webserver" --format "{{.Ports}}"
0.0.0.0:80->80/tcp

上面的命令将只显示名为 webserver 的容器的端口映射信息。

Docker API

除了命令行工具,Docker 还提供了一组 RESTful API 来管理容器和镜像。我们可以使用这些 API 来查询和操作 Docker 的各个方面,包括端口号。

首先,我们需要获取容器的 ID 或名称。可以使用 docker inspect 命令来获取容器的详细信息。

$ docker inspect -f '{{.Id}}' webserver
7a7c5ea4a7f0

上述命令将返回容器 webserver 的 ID。

接下来,我们可以使用 Docker API 的 /containers/{id}/json 端点来获取容器的详细信息,其中 {id} 是容器的 ID。

$ curl --unix-socket /var/run/docker.sock http:/containers/7a7c5ea4a7f0/json

通过上述命令我们可以获取容器的 JSON 格式的详细信息,其中包括端口号。

代码示例

下面是一个使用 Python 调用 Docker API 查看指定容器端口号的示例代码:

import docker
import re

def get_container_ports(container_name):
    client = docker.DockerClient(base_url='unix://var/run/docker.sock')
    container = client.containers.get(container_name)
    ports = container.attrs['NetworkSettings']['Ports']
    container_ports = []
    for port in ports:
        if ports[port] is None:
            continue
        for binding in ports[port]:
            host_port = re.findall('\d{2,5}', binding['HostPort'])[0]
            container_ports.append((host_port, port))
    return container_ports

container_ports = get_container_ports('webserver')
for host_port, port in container_ports:
    print(f"Host Port: {host_port}, Container Port: {port}")

上述代码使用了 Docker SDK for Python,通过访问 Docker API 来获取指定容器的端口号信息。它首先连接到 Docker 守护进程,并获取容器对象。然后,通过访问容器对象的 attrs 属性,可以获取到 JSON 格式的容器信息,其中包括端口号信息。最后,通过正则表达式从绑定的主机端口中提取端口号,将主机端口和容器端口作为元组保存。

总结

本文介绍了如何使用 Docker 命令和 API 查看指定容器的端口号。通过 docker ps 命令可以方便地查看正在运行的容器的端口映射信息,而使用 Docker API 可以更灵活地获取容器的详细信息,包括端口号。我们还提供了一个使用 Docker SDK for Python 调用 Docker API 的示例代码。

希望本文能帮助你更好地理解和应用