essayer d'obtenir le débogage à distance pour mon python flask API que j'ai. Je suis en mesure de composer avec docker et d'avoir postman avec succès appeler le conteneur en cours d'exécution, mais quand j'essaye de joindre le débogueur, il ne se compile jamais. Ci-dessous mes paramètres de lancement yml, dockerfile et vscode ... l'erreur suivante que j'obtiens est:
Une erreur s'est produite lors du démarrage du serveur de débogage. Erreur = {"code": "ECONNREFUSED", "errno": "ECONNREFUSED", "syscall": "connect", "address": "127.0.0.1", "port": 5050}
version: '2'
services:
website:
build: .
command: >
python ./nomz/app.py
environment:
PYTHONUNBUFFERED: 'true'
volumes:
- '.:/nomz'
ports:
- '5000:5000'
- '5050'
DockerFile
FROM python:3.6-slim
ENV INSTALL_PATH /nomz
RUN mkdir -p $INSTALL_PATH
WORKDIR $INSTALL_PATH
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 5000 5050
Paramètres de lancement de VSCode
{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"localRoot": "${workspaceFolder}/nomz/app.py",
"remoteRoot": "/nomz/",
"port": 5050,
"Host": "localhost"
}
Je l'ai finalement fait fonctionner avec le débogage à distance. J'ai dû pip3 installer ptvsd == 3.0.0 sur mon local et m'assurer que le requirements.txt de mon conteneur docker avait la même version. (note: la dernière version 3.2.1 ne fonctionnait pas)
@BrettCannon avait le bon lien pour un bon tutoriel https://code.visualstudio.com/docs/python/debugging#_remote-debugging
Ce que je devais faire était d'ajouter du code à l'app.py de l'application flask. À l'origine, j'obtenais une erreur d'adresse déjà utilisée lors du démarrage du conteneur, j'ai donc ajouté le code de socket et après le premier attachement réussi du débogueur, je ne semblais plus en avoir besoin (étrange je sais, mais c'est pourquoi je l'ai laissé au cas où quelqu'un d'autre obtiendrait cette erreur)
try:
import ptvsd
# import socket
# sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# sock.close()
ptvsd.enable_attach(secret=None,address=('0.0.0.0',5050))
ptvsd.wait_for_attach()
except Exception as ex:
print('Not working: ')
j'ai également retiré le débogage kwarg de app.run () dans app.py pour l'application flask. Tout cela m'a donné la possibilité de connecter le débogueur, mais les points d'arrêt où "Non vérifié", donc la dernière chose qui devait arriver était un chemin vers app.py dans le launch.json pour le remoteRoot. Je dirai que j'ai créé une petite API de test pour que cela fonctionne, et il n'a besoin que du premier niveau de cheminement (ie ./app et non /app/app/app.py)Voici un github de l'API de test que j'ai fait ( https://github.com/tomParty/docker_python ). Donc, si le débogueur est attachant, mais vos points d'arrêt ne sont pas vérifiés, jouez avec le chemin de la télécommande
"remoteRoot": "/nomz/nomz/app.py"