web-dev-qa-db-fra.com

Comment déboguer à distance python dans un conteneur Docker avec VS Code

Je viens de m'inscrire pour cette question. Il s'agit de savoir s'il est possible de déboguer à distance python dans un Docker Container avec VS Code. J'ai un Docker Container complètement configuré ici. J'ai obtenu un peu d'aide avec, et je '' m assez nouveau à docker de toute façon. Dans il exécute Odoo v10. Mais je ne peux pas obtenir le débogage à distance dans VS Code pour travailler. J'ai essayé this explication, mais je ne comprends pas vraiment. Est-ce même possible? Et si oui, comment puis-je le faire fonctionner? J'utilise Kubuntu 16.04 avec VS Code 1.6.1 et l'extension Python de Don Jayamanne. Ah oui et j'espère que je suis au bon endroit avec cette question et ce n'est contre aucune règle.

MISE À JOUR:

Je viens d'essayer la voie d'Elton Stoneman. Avec ça, je reçois cette erreur:

There was an error in starting the debug server. 
Error = {"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect",
         "address":"172.21.0.4","port":3000}

Mon Dockerfile ressemble à ceci:

FROM **cut_out**
USER root
# debug/dev settings

RUN pip install \
        watchdog

COPY workspace/pysrc /pysrc
RUN apt-get update \
 && apt-get install -y --no-install-recommends \
        build-essential \
        python-dev \
 && /usr/bin/python /pysrc/setup_cython.py build_ext --inplace \
 && rm -rf /var/lib/apt/lists/*

EXPOSE 3000

USER odoo

Le pysrc dans mon Dockerfile est là car il était destiné à fonctionner avec PyDev (Eclipse) auparavant.

C'est le run command J'ai utilisé:

docker-compose run -d -p 3000:3000 odoo

Et c'est la partie importante de mon launch.json:

    {
        "name": "Attach (Remote Debug)",
        "type": "python",
        "request": "attach",
        "localRoot": "${workspaceRoot}",
        "remoteRoot": "${workspaceRoot}",
        "port": 3000,
        "secret": "my_secret",
        "Host": "172.21.0.4"
    }

J'espère que c'est assez d'informations pour l'instant.

MISE À JOUR 2:

D'accord, j'ai trouvé la solution. J'ai totalement mal compris le fonctionnement de Docker et l'ai complètement mal essayé. J'avais déjà un Docker-compose complètement configuré. Donc, tout ce que je devais faire était d'adapter mes configurations VS Code au docker-compose.yml. Cela signifie que je devais juste changer le launch.json au port 8069 (port Odoo par défaut) et juste besoin d'utiliser docker-compose up, le débogage fonctionne dans VS Code. Malheureusement, l'utilisation de ptvsd détruit un peu mon environnement Odoo, mais au moins je peux déboguer maintenant. Merci!

13
Brotbret

Oui, c'est possible - lorsque l'application Python s'exécute dans un conteneur Docker, vous pouvez la traiter comme une machine distante.

Dans votre image Docker, vous devrez rendre le port de débogage distant disponible (par exemple EXPOSE 3000 dans le Dockerfile), incluez la configuration ptvsd dans votre application Python, puis publiez le port lorsque vous exécutez le conteneur, quelque chose comme:

docker run -d -p 3000:3000 my-image

Utilisez ensuite docker inspect pour obtenir l'adresse IP du conteneur en cours d'exécution, et c'est ce que vous utilisez pour le Host dans le fichier de lancement.

8
Elton Stoneman