nsenter
コマンドを使用して、Dockerコンテナのネットワーク名前空間内でホスト上でコマンドを実行できます。ちょうどあなたのドッカーコンテナのPIDを取得する:
例えば
docker inspect -f '{{.State.Pid}}' container_name_or_id
、私のシステム上:
$ docker inspect -f '{{.State.Pid}}' c70b53d98466
15652
そして、あなたは、PIDを持っているの引数のターゲットに(-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
パッケージの一部である)
ありがとう!これは素晴らしい作品です! – AdvilUser
このソリューションは、Windows、Macなどの他のプラットフォームにも適用できますか? – Rao
@Rao、おそらく: 'nsenter'はLinuxコマンドなので、Dockerコンテナをホストするために実際に使用されているLinux VMにログインできる必要があります。もちろん、そのVMは 'nsenter'コマンドを利用できるようにする必要があります。 – larsks