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