根据进程ID查询Docker容器运行端口

根据进程ID查询Docker容器运行端口的方法如下(分步骤说明):

方法一:通过容器ID直接查询(最精确)

  1. 根据进程ID查找容器ID
ps -e -o pid,comm,cgroup | grep <进程PID>
# 示例(假设进程ID为3188):
ps -e -o pid,comm,cgroup | grep 3188

在输出结果中,cgroup​字段包含类似/docker/0c42a678c230c7fa5ab5f627d411f248​的容器完整ID(取/docker/​后面的部分)
2. 通过容器ID查询端口

docker port <容器ID>
# 示例:
docker port 0c42a678c230

这会显示容器所有映射到主机的端口(如8080/tcp -> 0.0.0.0:8080​)

方法二:通过容器元数据查询(可能查询不到)

  1. 根据进程ID定位容器
docker ps -q | xargs docker inspect --format '{{.Id}} {{.State.Pid}} {{.NetworkSettings.Ports}}' | grep <进程PID>

这会直接输出容器ID及其端口映射信息

方法三:通过系统工具追溯(最方便,但是显示的端口是容器内的,不是宿主机端口)

  1. 查看进程网络连接
nsenter -t <进程PID> -n netstat -tuln

此命令进入容器的网络命名空间,查看容器内部的监听端口

补充说明

  • 若容器未显式映射端口:需通过docker inspect <容器ID>​查看NetworkSettings.Ports​字段确认实际使用的端口。
  • 快速验证:若已知容器名称,可直接docker port <容器名>​查询。

总结推荐使用流程

# 步骤1:通过进程ID获取容器ID
ps -e -o pid,comm,cgroup | grep 你的进程ID

# 步骤2:通过容器ID查询端口
docker port 上一步得到的容器ID