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

我已经连接到docker集装箱,并需要找出由java应用程序打开的套接字的数量。 不幸的是,在容器中没有lsof,netstat可用。 / proc / PID / net / tcp中没有数据。 有什么方法可以find这些数据?

我喜欢netshoot这个。 您可以在同一个networking中运行一个容器,甚至是pid命名空间,然后使用netshoot中的工具来分析另一个容器的networking:

$ 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 

或者, 只要与docker守护进程在同一个框中 ,就可以在主机中看到: /proc/PID/net/tcp 。 这比@Bitch的答案不那么优雅。

你需要做的是找出容器的进程的PID(在主要的pid命名空间,从技术上说,你的主机)。

 ps aux | grep java 

在你的容器里面,你的java有一个pid; 但在外面有另外一个可以用来访问你所请求的信息的pid: /proc/PID/net/tcp