我想在正在运行的docker容器中执行netstat,以查看打开的TCP套接字及其状态。但是,在我的某些Docker容器上,netstat不可用。是否可以通过某些Docker API在不使用netstat的情况下获取打开的套接字(及其状态以及它们连接到的IP地址,如果有的话)的任何方法?(顺便说一句,我的容器使用docker- proxy-即不直接桥接)
我想我可以直接查看/ proc文件系统,但是到那时,我最好将docker cp netstat放入容器并执行它。我想知道码头工人是否可以提供任何便利。
您可以使用该nsenter命令在Docker容器的网络名称空间内的主机上运行命令。只需获取Docker容器的PID:
nsenter
docker inspect -f '{{.State.Pid}}' container_name_or_id
例如,在我的系统上:
$ docker inspect -f '{{.State.Pid}}' c70b53d98466 15652
并且一旦有了PID,就可以将其用作的target(-t)选项的参数nsenter。例如,要netstat在容器网络名称空间内运行:
-t
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"
(nsenter是util-linux包装的一部分)
util-linux