Docker:任何方式来列出正在运行的docker集装箱内打开的套接字?

我想在运行的docker容器中执行netstat来查看打开的TCP套接字及其状态。 但是,在我的一些docker集装箱上,netstat不可用。 有没有办法通过一些dockerAPI来获得开放的套接字(和它们的状态,以及它们连接到哪个IP地址),而不使用netstat? (顺便说一句,我的容器使用docker代理 – 也就是说,不直接桥接)

我想我可以直接查看/ proc文件系统,但是在那一点上,我不妨将docker cp netstat放入容器并执行它。 我想知道是否有任何docker可以提供这个设施。

您可以使用nsenter命令在Docker容器的networking名称空间内的主机上运行命令。 只需获取Docker容器的PID:

 docker inspect -f '{{.State.Pid}}' container_name_or_id 

例如,在我的系统上:

 $ docker inspect -f '{{.State.Pid}}' c70b53d98466 15652 

一旦你有PID,用它作为nsenter目标( -t )选项的nsenter 。 例如,要在容器networking命名空间内运行netstat

 $ sudo nsenter -t 15652 -n netstat Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 

请注意,即使容器没有安装netstat

 $ docker exec -it c70b53d98466 netstat rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"exec: \\\"netstat\\\": executable file not found in $PATH\"\n" 

nsenterutil-linux软件包的一部分)