在docker容器中查找打开的套接字

时间:2017-06-06 18:07:51

标签: docker

我已经附加到一个docker容器,需要找出java应用程序打开的套接字数量。不幸的是,容器中没有lsof或netstat。 /proc/PID/net/tcp中没有数据。有什么方法可以找到这些数据吗?

2 个答案:

答案 0 :(得分:3)

我喜欢netshoot。您可以在同一网络甚至pid命名空间中运行容器,并使用netshoot中的工具来分析其他容器的网络:

$ docker run -d -p 8888:80 --name nginx-test nginx
d8a90f5c7d1744483ae6d26cc97dad222ed237b5c4211f711c9f15f88252897f

$ docker run --net container:nginx-test --pid container:nginx-test -it --rm nicolaka/netshoot

/ # netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx: master pro
/ # ps -ef
PID   USER     TIME   COMMAND
    1 root       0:00 nginx: master process nginx -g daemon off;
    7 104        0:00 nginx: worker process
    8 root       0:00 sh
   15 root       0:00 ps -ef

答案 1 :(得分:2)

或者,您可以在主机中看到:/proc/PID/net/tcp,只要您与docker守护程序位于同一个框中。这不如@Micitch的回答那么优雅。

您需要做的是找出流程的 容器的PID(在主pid命名空间中,从技术上讲,您的主机)。

ps aux | grep java

在您的容器内,java有一个pid;但在它之外还有另一个pid,您可以用它来访问您所请求的信息:/proc/PID/net/tcp