Avec la popularité de l'architecture des microservices, la technologie de conteneurisation est devenue de plus en plus populaire. Dans de nombreux cas, nous devons déboguer les applications exécutées dans des conteneurs afin de résoudre les problèmes et d'optimiser les performances. Le débogage à distance dans Docker est un besoin courant. Cet article présentera comment déboguer à distance dans Docker, ainsi que certains problèmes et techniques que vous pourriez rencontrer au cours du processus.
1. Installer les outils de débogage dans le conteneur
Pour déboguer dans un conteneur Docker, vous devez installer les outils de débogage dans le conteneur. Ici, nous prenons le système Debian comme exemple de conteneur pour présenter comment installer les outils de débogage.
1. Démarrez d'abord un conteneur Debian :
docker run -it --name=debug debian /bin/bash
2 Après avoir entré le conteneur, mettez à jour la liste des paquets :
apt-get update
3. Installez l'outil de débogage GDB :
apt-get install -y gdb
2. Connectez l'outil de débogage à l'application
Après avoir installé l'outil de débogage, nous devons connecter l'outil de débogage à l'application en cours d'exécution.
1. Tout d'abord, vous devez activer le débogage à distance via les variables d'environnement lors de la création du conteneur :
docker run -it -e DEBUG=true --name=myapp myimage
2 Obtenez le PID de l'application. Il existe de nombreuses façons d'obtenir le PID d'une application, par exemple en utilisant la commande Linux ps :
ps aux | grep myapp
3. Connectez le débogueur à l'application :
gdb -ex "set follow-fork-mode child " -p ${pid}
3. Débogage
Une fois connecté à l'application, nous pouvons commencer le débogage. Voici quelques commandes GDB couramment utilisées :
1. Définir les points d'arrêt :
b [file:]function[:line]
2. Commencez à exécuter le programme :
r [args]
3. exécution :
s
4. Ignorer la fonction actuelle :
n
5. Afficher les variables :
print var
6. , Vous devrez peut-être vous connecter via un pare-feu, auquel cas vous pourriez rencontrer des problèmes de blocage de port. Dans ce cas, nous pouvons modifier l'attribut EXPOSE du conteneur pour exposer les ports requis lors du démarrage du conteneur.
Par exemple, nous souhaitons exposer le port 3000 du conteneur :
docker run -it -e DEBUG=true --name=myapp -p 3000:3000 myimage
Pendant le débogage à distance, vous pouvez rencontrer certaines des situations anormales suivantes. Voici quelques solutions :
1. Les conteneurs ne prennent pas en charge le débogage GDB
Certains conteneurs ne prennent pas en charge le débogage GDB car ils ne disposent pas des informations de débogage nécessaires. La solution consiste à créer une nouvelle image basée sur la version de débogage, qui contient les informations de débogage nécessaires. Ensuite, déboguez dans cette image.
2. Connexion refusée
3. Impossible de trouver les informations de débogage
Résumé
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!