web-dev-qa-db-fra.com

Débogage à distance PyCharm dans un conteneur de menu fixe

J'ai de la difficulté à comprendre comment configurer le débogage à distance d'une application python (Flask) s'exécutant dans un conteneur Docker ... Plus précisément, j'utilise Docker-Compose, PyCharm Professional et Python 3.5 . C’est ce que j’ai fait jusqu’à présent:

  • J'ai copié "pycharm-debug-py3k.Egg" dans le dossier du projet
  • J'ai ajouté les lignes suivantes dans le fichier wsgi.py:

    import sys spath.append ('../ pycharm-debug-py3k.Egg') importer pydevd pydevd.settrace ('0.0.0.0', port = 8200, stdoutToServer = True, stderrToServer = True)

  • J'ai créé une configuration de débogage à distance dans PyCharm (en mappant le chemin d'accès de mon projet local à celui du conteneur de menu fixe)

en exécutant la configuration de débogage (cliquez sur l'icône du bogue) à partir de PyCharm, il imprime (et se bloque):

Starting debug server at port 4200
Use the following code to connect to the debugger:
import pydevd
pydevd.settrace('0.0.0.0', port=4200, stdoutToServer=True, stderrToServer=True)
Waiting for process connection...

... et dans les journaux de conteneur de menu fixe, je lis:

Impossible de se connecter à 0.0.0.0: 4200

Que devrais-je faire? (Mon objectif est de pouvoir ajouter des points d'arrêt dans PyCharm et d'arrêter l'exécution de l'application de conteneur docker afin de la déboguer)

15
daveoncode

Utilisez un interprète à distance, cela résoudra quelques problèmes à la fois. J'ai déjà répondu à cela ici Éditeurs riches dans un environnement de développement Docker

Ajoutez un SDK python distant à votre IDE, cela résoudra également toutes les bibliothèques installées à distance. Pour ce faire, vous aurez besoin d’une connexion SSH. Installez sshd et utilisez la clé de développeur partagée que j’ai décrite dans ma réponse.

Même si cela demande un peu plus d'effort, je vous donnerai de bien meilleurs résultats, également dans les autres sections que vous n'avez pas encore rencontrées et que vous trouverez lorsque vous ne ferez qu'une connexion à distance.

Si vous souhaitez toujours utiliser le débogage basé sur le port, voir Docker: ports du conteneur MacOSX Expose sur la machine hôte - Ceci explique comment vous devez comprendre les parties attachée et écoutée.

8
Eugen Mayer

Utilisez Host.docker.internal au lieu de 0.0.0.0. Cela permettra au menu fixe de choisir l’adresse IP à utiliser. 

1
Drew Rochon