您可以使用该nsenter
命令在Docker容器的网络名称空间内的主机上运行命令。只需获取Docker容器的PID:
docker inspect -f '{{.State.Pid}}' container_name_or_id
例如,在我的系统上:
$ docker inspect -f '{{.State.Pid}}' c70b53d98466
15652
并且一旦有了PID,就可以将其用作的target(-t
)选项的参数nsenter
。例如,要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
包装的一部分)