Des exemples à expliquer et à voir nsenter vous amènent à regarder Internet du "point de vue de Dieu"

Résumé : Cet article se concentre sur la perspective "réseau ns" d'entrer dans le processus cible, c'est-à-dire de regarder le monde du réseau à l'intérieur du conteneur du point de vue "processus dans le conteneur" et d'exécuter des commandes dans cette perspective.

Cet article est partagé par la communauté Huawei Cloud " Learning Cloud Network with Teacher Tang" - nsenter Magic Wand , auteur : tsjsdbd.

Parfois, le logiciel requis est absent d'un conteneur Docker. Par exemple, les progiciels de base tels que curl, wget, ifconfig, ip, tcpdump, etc., ne peuvent rien faire, ce qui rend les gens fous.

[root@tsjsdbd home]# docker exec -it 8402 /bin/bash
root@8402d89fe04a:/# ifconfig
bash: ifconfig: command not found
root@8402d89fe04a:/# ip
bash: ip: command not found
root@8402d89fe04a:/# tcpdump
bash: tcpdump: command not found
root@8402d89fe04a:/# curl
bash: curl: command not found
root@8402d89fe04a:/# nslookup
bash: nslookup: command not found
root@8402d89fe04a:/# wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Face à ce genre d'image de conteneur, il sera très difficile de localiser le problème, car après être entré dans le conteneur, il faut réinstaller divers logiciels de base si l'on veut exécuter des commandes, ce qui est très gênant.

À ce moment, nous devons ramasser la baguette magique "nsenter" et l'agiter sur l'hôte.

ns-enter, comme son nom l'indique, "entre dans divers espaces de noms", c'est-à-dire que la commande nsenter peut entrer dans la perspective ns du processus cible spécifié.

Ainsi, nsenter peut regarder le monde du "perspectif" du processus spécifié. Cet article se concentre sur la perspective "réseau ns" d'entrer dans le processus cible, c'est-à-dire du "perspectif du processus dans le conteneur" pour regarder le monde du réseau à l'intérieur du conteneur, et exécuter dans cette perspective Order.

Tout d'abord, nous devons trouver l'ID de processus cible du "n cible" à entrer. C'est-à-dire : le processus racine dans le conteneur

[root@tsjsdbd ubuntu]# docker inspect 8402d89fe04a
[
    {
        "Id": "8402d89fe04a7e161faf8a01a86c47f8402d4c8d7207b6897d8e6d661d670df4",
        "State": {
            "Status": "running",
            "Pid": 18751,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-05-10T03:12:19.221460059Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },

Le "boss" dans le conteneur est le numéro de processus 18751.

Nous suivons donc ce processus directement sur l'hôte hôte et entrons dans sa "perspective", et nous pouvons voir le monde à l'intérieur du conteneur. Et puisque nous, en tant que contrôleur, sommes toujours sur l'hôte à ce moment, nous pouvons exécuter diverses lignes de commande sur l'hôte.

comme suit:

[root@tsjsdbd ubuntu]# nsenter -t 18751 -n ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02 txqueuelen 0  (Ethernet)
        RX packets 1688355  bytes 194318903 (185.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 138826  bytes 146246172 (139.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
 inet 127.0.0.1  netmask 255.0.0.0
 loop  txqueuelen 0  (Local Loopback)
        RX packets 13939  bytes 13140220 (12.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13939  bytes 13140220 (12.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

D'autres commandes peuvent être exécutées en les copiant.

Par exemple, il n'y a pas de commande nslookup dans le conteneur, mais uniquement sur l'hôte Host, nous pouvons l'exécuter dans le conteneur :

[root@tsjsdbd ubuntu]# nsenter -t 18751 -n nslookup www.baidu.com
Server:       10.129.2.34
Address:   10.129.2.34#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name:  www.a.shifen.com
Address: 14.119.104.254
Name:  www.a.shifen.com
Address: 14.119.104.189

Par conséquent, le comportement de débogage qui n'a pas pu être exécuté dans le conteneur peut être complété de cette manière.

Plus directement, si vous ne prenez pas le dernier paramètre de commande d'exécution, vous pouvez entrer directement la "perspective cible" pour exécuter la cli de manière interactive :

[root@tsjsdbd ubuntu]# nsenter -t 18751 -n
#这里就进入交互模式,相当于没有填写cli时,默认执行[当前bash]
[root@tsjsdbd ubuntu]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
4261: eth0@if4262: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
[root@tsjsdbd ubuntu]# curl
curl: try 'curl --help' or 'curl --manual' for more information
[root@tsjsdbd ubuntu]# tcpdump
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
[root@tsjsdbd ubuntu]# exit
#执行exit,可退出“目标视角”

On peut voir que toutes les lignes de commande cli liées au réseau peuvent être exécutées.

De plus, ces commandes sont toutes exécutées du point de vue du conteneur, de sorte que l'effet est le même que dans le conteneur (bien qu'elles soient elles-mêmes initiées dans l'hôte).

Semblable aux films "Source Code" et "The Matrix", utilisez les "personnes" du monde extérieur pour contrôler le comportement dans le "monde intérieur" . J'espère que vous pouvez comprendre la logique de cette perspective de Dieu :-)

Résumé de l'utilisation :

(1) Trouver le PID du processus cible

docker inspect xxx

(2) Exécutez directement des commandes cli spécifiques

nsenter -n -t 822647 ifconfig

(3) Entrez dans la perspective du conteneur et effectuez une cli interactive

nsenter -n -t 822647
exit

 

Cliquez pour suivre et en savoir plus sur les nouvelles technologies de Huawei Cloud pour la première fois ~

Les diplômés de l'Université populaire nationale ont volé les informations de tous les étudiants de l'école pour créer un site Web d'évaluation de la beauté et ont été détenus au criminel. La nouvelle version Windows de QQ basée sur l'architecture NT est officiellement publiée. Les États-Unis limiteront l'utilisation de la Chine d'Amazon, Microsoft et d'autres services cloud qui fournissent des modèles d'IA de formation.Des projets open source annoncés pour arrêter le développement de fonctions fonctions d'image du terminal Le nombre d'enregistrements de Threads a dépassé les 30 millions "Change" deepin adopte Asahi Linux pour s'adapter au classement de la base de données Apple M1 en juillet : Oracle surgit, ouvrant à nouveau le score
{{o.name}}
{{m.name}}

Je suppose que tu aimes

Origine my.oschina.net/u/4526289/blog/10086822
conseillé
Classement