nsenter
명령을 사용하여 Docker 컨테이너의 네트워크 네임 스페이스 내부에서 명령을 실행할 수 있습니다. 내 시스템에 예를 들어
docker inspect -f '{{.State.Pid}}' container_name_or_id
, :
$ docker inspect -f '{{.State.Pid}}' c70b53d98466
15652
을 그리고 당신이 PID를하면, 대상 (-t
) 옵션에 인수로 것을 사용 그냥 도커 컨테이너의 PID를 얻을 수 nsenter
. 예를 들어, 컨테이너 네트워크 네임 스페이스 내에서 netstat
를 실행합니다 :
이 컨테이너가
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
주의 사항 :
$ 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