2017-09-30 6 views
1

docker composeを使用して私のdjangoアプリケーションを実行しています。 Ngninxおよびgunicornは、supervisorによって実行されます。スーパーバイザでpdbを使用する

しかし、pdbを使用してデバッグする方法を理解できないようです。私が使用している場合:

import pdb 
pdb.set_trace() 

をコマンドdocker-compose upを実行した後、私のアプリとデータベースが実行を開始し、端末画面には、さらに出力を表示するために待機しているアクティブなまま。

私のコードがpdb.set_trace()に達すると、前述の端末はそのままで、(pdb)インターフェイスは表示されません。

pdbを使用してアプリケーションをデバッグする方法を知っている人はいますか?私は使用する必要がある何か他にありますか?

ありがとうございます。

更新

docker-compose.yml

version: '3' 

services: 
    db: 
    image: mysql/mysql-server:latest 
    container_name: my_container_name 
    ports: 
     - "3306:3306" 
    environment: 
     MYSQL_DATABASE: "mydb" 
     MYSQL_USER: "myusername" 
     MYSQL_PASSWORD: "mypass" 
     MYSQL_ROOT_PASSWORD: "mypass" 
     MYSQL_ALLOW_EMPTY_PASSWORD: "yes" 
    command: mysqld 

    web: 
    build: . 
    container_name: my_container_name 
    ports: 
     - "9000:9000" 
    depends_on: 
     - db 

supervisord.conf

[supervisord] 
nodaemon=true 

[program:nginx] 
command=/usr/sbin/nginx 

[program:djangoserver] 
command=python /myapp/djangorest/manage.py runserver localhost:8000 
stdin_open: true 
tty: true 
+1

あなたはPID 1としてスーパーバイザを実行していますが、この方法は機能しません。あなたはnginxとdjnagoserverのために別々の容器を使う必要があります –

+0

@ TarunLalwaniありがとうございます。最後に、コンテナを分離した後に動作させました。 – leon

答えて

1

デバッグしたいなら、あなたは絵の外にgunicorn取ると直接django manage.py runserverを使用してジャンゴ起動する必要があります。

Gunicornはバックグラウンドでスレッドまたはプロセスを起動し、標準入力に添付することは困難です。したがって、メインのPID 1にstdinを付け、同じPIDに接続したいとします。あなたはその後、

docker-compose up -d 
docker-composeは、標準入力に接続することはできませんので、あなたが分離モードで同じことを起動する必要があり
command: python manage.py runserver 0.0.0.0:8000 
stdin_open: true 
tty: true 

あなた docker-compose.ymlに変更させる必要があり、あなたのDjangoのサービスにパラメータの下に追加されますあなたがデバッグするときに次に docker直接

docker attach <project>_<djangocontainername>_1 

を使ってDjangoのコンテナに接続したい。その後

(pdb)端末が表示されます

+0

ありがとうTarun。私がこのようにすると、出力はdjangoserverが実行されていると表示されますが、実際には表示されません(アプリを実行すると動作しません。コンテナ)。なぜこれがあるのか​​知っていますか? – leon

+0

質問で使用した最後のドッカーの構成を更新します –

+0

私の最新のファイルで自分の答えを更新しました。注意: 'command'、' stdin'、 'tty'を' docker-compose.yml'に移動すると、 'django.db.utils.OperationalError:(1130、" Host '172.18。 0.3 'はこのMySQLサーバに接続することができません ")。 PS:私はあなたの答えを誤って編集しました。あなたか他の誰かが編集を拒否することができればうれしいです。 – leon

関連する問題