Je voudrais exécuter netstat dans un conteneur de menu fixe en cours d'exécution pour voir les sockets open TCP et leurs statuts. Toutefois, sur certains de mes conteneurs de menu fixe, netstat n'est pas disponible. Est-il possible de s'ouvrir sockets (et leurs statuts et les adresses IP auxquelles ils sont connectés, le cas échéant) sans utiliser netstat, via une API de menu fixe (BTW, mon conteneur utilise docker-proxy - c’est-à-dire, pas directement ponté)
Je suppose que je pourrais regarder le système de fichiers/proc directement, mais à ce moment-là, je pourrais aussi bien docker cp netstat dans le conteneur et l'exécuter. Je me demandais si docker pouvait prévoir cela.
Vous pouvez utiliser la commande nsenter
pour exécuter une commande sur votre hôte à l'intérieur de l'espace de noms réseau du conteneur Docker. Obtenez simplement le PID de votre conteneur Docker:
docker inspect -f '{{.State.Pid}}' container_name_or_id
Par exemple, sur mon système:
$ docker inspect -f '{{.State.Pid}}' c70b53d98466
15652
Et une fois que vous avez le PID, utilisez-le comme argument de la cible (-t
) option de nsenter
. Par exemple, pour exécuter netstat
à l'intérieur de l'espace de noms réseau du conteneur:
$ 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
Notez que cela a fonctionné même si le conteneur n'a pas installé 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
fait partie de la util-linux
paquet)
Les deux commandes de @larsks répondent à une seule ligne - inutile de copier-coller le ou les PID (il suffit de remplacer container_name_or_id
):
Sudo nsenter -t $(docker inspect -f '{{.State.Pid}}' container_name_or_id) -n netstat
serveur: conteneur docker ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80acfa804b59 admirito/gsad:10 "docker-entrypoint.s…" 18 minutes ago Up 10 minutes 80/tcp gvmcontainers_gsad_1