查看使用宿主机模式的Docker容器端口
当Docker容器使用宿主机模式(--net=host
)时,容器会直接使用宿主机的网络命名空间,这意味着容器和宿主机共享相同的网络接口和端口。在这种情况下,容器内部的进程就像在宿主机上直接运行一样,不会通过Docker的网络栈进行端口映射。因此,我们无法通过Docker的命令(如docker port
或docker inspect
)直接查看容器使用的端口。不过,我们可以通过查看宿主机上的进程和端口使用情况来确定容器使用了哪些端口。
一、使用netstat
或ss
命令
netstat
和ss
命令可以查看宿主机上所有进程的端口使用情况。你可以通过grep
命令过滤出属于容器进程的端口。
1.使用netstat
命令
netstat -tulnp | grep <container_process_name>
例如,如果你知道容器运行的进程名称是nginx
,可以运行:
netstat -tulnp | grep nginx
2.使用ss
命令
ss -tulnp | grep <container_process_name>
例如:
ss -tulnp | grep nginx
二、使用lsof
命令
lsof
命令可以列出所有打开的文件和网络连接,包括端口。你可以通过lsof
命令来查看宿主机上所有进程的端口使用情况。
1.查看所有进程的端口使用情况
lsof -i
2.过滤特定进程的端口使用情况
如果你知道容器运行的进程名称,可以使用grep
来过滤:
lsof -i | grep <container_process_name>
例如:
lsof -i | grep nginx
三、查看容器内部的进程
如果你不确定容器内部运行的进程名称,可以进入容器内部查看。
1.进入容器
docker exec -it <container_id_or_name> /bin/bash
2.在容器内部使用netstat
或ss
命令
在容器内部,你可以使用netstat
或ss
命令来查看容器内部的端口使用情况:
netstat -tulnp
或者:
ss -tulnp
四、查看容器的进程信息
如果你不知道容器的进程号,但知道容器的名称或ID,可以使用docker top
命令查看容器内部的进程信息。
1.查看容器的进程信息
docker top <container_id_or_name>
这将列出容器内部运行的所有进程及其进程号。
2.结合lsof
命令查看端口
你可以将docker top
命令的输出与lsof
命令结合使用,来查看这些进程使用的端口。例如:
docker top <container_id_or_name> | awk '{print $2}' | xargs -I {} lsof -i -p {}
示例
假设你的容器名称是myapp
,你可以按照以下步骤操作:
1.查看容器的进程信息
docker top myapp
2.提取进程号并查看端口
docker top myapp | awk '{print $2}' | xargs -I {} lsof -i -p {}
Mermaid解释图
以下是使用Mermaid绘制的解释图,展示如何查看宿主机模式下容器的端口使用情况。
graph TDA[开始] --> B[容器使用宿主机模式]B --> C{是否知道进程名称}C -->|是| D[使用netstat或ss命令]C -->|否| E[进入容器内部]D --> F[netstat -tulnp | grep <进程名称>]D --> G[ss -tulnp | grep <进程名称>]E --> H[docker exec -it <容器ID或名称> /bin/bash]H --> I[在容器内部使用netstat或ss命令]I --> J[netstat -tulnp]I --> K[ss -tulnp]F --> L[查看端口使用情况]G --> LJ --> LK --> LL --> M[结束]