Je vois que je ne suis pas le premier à poser la question mais il n'y avait pas de réponse claire à ceci:
Comment utiliser pdb avec docker-composer dans le développement Python?
Lorsque vous interrogez Google sur Django docker
, vous obtenez des exemples et des didacticiels géniaux pour docker-composer et mon environnement fonctionne. Je peux exécuter docker-compose up
et mon environnement de développement est soigné mais la PDB ne fonctionne pas (ce qui est très triste). .
Je peux régler avec docker-compose run my-awesome-app python app.py 0.0.0.0:8000
mais je peux accéder à mon application via http://127.0.0.1:8000 à partir de l'hôte (je peux avec docker-compose up
) et il semble que chaque fois que j'utilise run
, de nouveaux conteneurs sont créés comme : dir_app_13
et dir_db_4
que je ne souhaite pas du tout.
Les gens de bonne volonté s'il vous plaît, aidez-moi.
PS
J'utilise pdb ++ pour cet exemple et un fichier de base docker-compose.yml à partir de cet exemple de Django . Aussi j'ai expérimenté mais rien ne semble m'aider. Et j'utilise docker-composer 1.3.0rc3 car il est supporté par Dockerfile.
Essayez d’exécuter votre conteneur Web avec l’option --service-ports: docker-compose run --service-ports web
Utilisez les étapes suivantes pour attacher pdb à n’importe quel script python.
Étape 1. Ajoutez ce qui suit dans votre fichier yml
stdin_open: true
tty: true
Cela activera le mode interactif et attachera stdin. Ceci est équivalent pour le mode -it.
Étape 2.
docker attach <generated_containerid>
Vous allez maintenant obtenir le shell pdb
Jusqu'à ce que je sache, la commande docker-compose up
ne fournit pas de shell interactif, mais elle lance l'impression de STDOUT sur le shell en lecture seule par défaut.
Ou, si vous avez spécifié et répertoire des journaux mappés, la commande docker-compose up
n’imprimera rien sur le shell attaché, mais elle enverra une sortie vers vos journaux mappés. Donc, vous devez attacher le conteneur séparément une fois qu'il est en cours d'exécution.
lorsque vous faites docker-compose up
, passez en mode détaché via -d
et connectez-vous au conteneur via
docker exec -it your_container_name bash