Ответ 1
Вы можете использовать команду nsenter
для запуска команды на своем хосте в пространстве имен в сети контейнера Docker. Просто получите PID вашего контейнера Docker:
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
)