如何查看 Docker 容器与宿主机连接的端口

Docker 是一个流行的容器化平台,允许开发者构建、部署和运行应用程序。Docker 容器可以在宿主机上运行多个服务,而这些服务通常会监听特定的端口。了解容器与宿主机之间的端口映射对于网络故障排查、安全审计和性能优化至关重要。本文将介绍如何查看 Docker 容器与宿主机连接的端口,并提供代码示例来帮助解决这一具体问题。

Docker 端口映射基础

在 Docker 中,当我们启动一个容器时,可以通过 -p--publish 选项将容器的端口映射到宿主机的端口。格式如下:

docker run -d -p <宿主机端口>:<容器端口> <镜像名>
  • 1.

例如,假设我们运行一个 web 应用程序的 Docker 容器,并将容器的 80 端口映射到宿主机的 8080 端口:

docker run -d -p 8080:80 nginx
  • 1.

在这个示例中,nginx 容器的 80 端口将通过宿主机 8080 端口对外提供服务。

查看 Docker 端口映射

要查看 Docker 容器与宿主机之间的端口映射,可以使用以下命令:

docker ps
  • 1.

该命令将列出正在运行的容器及其相关信息。输出中有一列名为 PORTS,其中显示了端口映射情况。

示例

假设我们的 docker ps 输出如下:

CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                  NAMES
abc123def456   nginx     "nginx -g 'daemon of…"   2 hours ago   Up 2 hours   0.0.0.0:8080->80/tcp   hardworking_morse
  • 1.
  • 2.

在此输出中,可以看到 0.0.0.0:8080->80/tcp 表示宿主机的 8080 端口映射到容器的 80 端口。

使用 Docker Inspect 查看详细信息

除了 docker ps 命令外,docker inspect 命令可以提供更详细的信息,包括端口映射。使用以下命令查看特定容器的详细信息:

docker inspect <容器ID或名称>
  • 1.

输出中包含一个 NetworkSettings 字段,里面有 Ports 键。比如:

docker inspect abc123def456
  • 1.

此输出可能包含以下部分:

"NetworkSettings": {
    "Ports": {
        "80/tcp": [
            {
                "HostIp": "0.0.0.0",
                "HostPort": "8080"
            }
        ]
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

这段 JSON 数据表明容器的 80 端口与宿主机的 8080 端口相连接。

监测工具

除了查看映射,有时候监测网络连接的工具更为重要。Docker 提供了一些工具和命令来监测和管理网络连接。

  • Docker Stats: 查看容器的运行状态,包括网络传输情况。
  • Docker Network ls: 列出所有 Docker 网络。
  • Docker Network inspect <网络名>: 查看特定网络的详细信息,包括正在使用的容器。

示例

我们可以使用 docker stats 命令来监控容器的网络流量:

docker stats
  • 1.

该命令会实时显示容器的 CPU、内存、网络 I/O 等信息。

序列图

以下是 Docker 容器与宿主机之间的网络连接过程示意图。

容器 Docker Daemon 宿主机 容器 Docker Daemon 宿主机 启动容器 安排网络 监听端口 映射端口 通过映射的端口访问

结论

通过本文的介绍,我们学习了如何查看 Docker 容器与宿主机之间的端口连接情况,包括如何使用 docker psdocker inspect 命令获取信息。此外,我们还探讨了 Docker 提供的监测工具以帮助我们更好地管理和监控容器的网络流量。作为一个开发者或运维人员,掌握这些技能将有助于我们构建更高效和安全的应用程序。

希望以上信息能够帮助您解决实际问题,并在使用 Docker 的过程中受益匪浅!若有任何疑问,欢迎在下面留言讨论。