web-dev-qa-db-ja.com

Docker-composeおよびpdb

私は質問をする最初の人ではないようですが、これに対する明確な答えはありませんでした。

Python開発でdocker-composerでpdbを使用する方法は?

おじさんにDjango dockerについて尋ねると、素晴らしいdocker-composerの例とチュートリアルが得られ、環境が機能しています-docker-compose upを実行でき、開発環境は整っていますしかしPDBは機能していません(非常に悲しいです) 。

docker-compose run my-awesome-app python app.py 0.0.0.0:8000を実行することで解決できますが、ホストから http://127.0.0.1:8000 を介してアプリケーションにアクセスできます(docker-compose upでできます)。 runを使用します。新しいコンテナは、dir_app_13およびdir_db_4のように作成されますが、これらはまったく望まないものです。

善意の人々は私を助けてください。

PS
この例ではpdb ++を使用し、 this Django example の基本的なdocker-compose.ymlを使用しています。また、私は実験しましたが、何も助けにならないようです。そして、Dockerfileポインティングをサポートしているdocker-composer 1.3.0rc3 を使用しています。

48
McAbra

--service-portsオプションを使用してWebコンテナを実行してみてください:docker-compose run --service-ports web

36
Jamey

次の手順を使用して、pythonスクリプトにpdbを接続します。

ステップ1. ymlファイルに以下を追加します

stdin_open: true
tty: true

これにより、インタラクティブモードが有効になり、stdinが接続されます。これは、-itモードと同等です。

ステップ2。

docker attach <generated_containerid>

これでpdbシェルを取得できます

91

私の経験まで、docker-compose upコマンドは対話型のシェルを提供しませんが、STDOUTの印刷をデフォルトの読み取り専用シェルに開始します。

または、ログディレクトリを指定してマップした場合、docker-compose upコマンドは接続されたシェルに何も出力しませんが、マップされたログに出力を送信します。そのため、コンテナは実行後に個別に接続する必要があります。

docker-compose upを実行する場合、-dを介して切り離しモードにし、経由でコンテナに接続します

docker exec -it your_container_name bash

0
Bhuro