2016-08-06 15 views
0

私はPostgresコンテナと組み合わせてDocker Composeで簡単なDjangoアプリケーションサーバーを起動しようとしています。それは私が期待するように、エントリポイントスクリプトを起動しますが、実際にDjangoアプリケーションサーバーを実行するようなことはありません(最後のステップで実行してください)。DjangoアプリケーションサーバーがDockerで起動しない/作成されませんCompose

移行手順が実行されるため、エントリポイントスクリプトが実行されることがわかります。アプリケーションサーバーは予想される出力を出力せず、ポート8000​​は決して応答しません。

Docker for Mac(安定版)を使用しています(問題がある場合)。

私のDjangoアプリケーションコンテナのDockerfile:

FROM ubuntu:16.04 

COPY my_app /my_app 

RUN apt-get update \ 
&& apt-get install -y python3 python3-psycopg2 python3-pip 

RUN apt-get install -y nodejs npm 

WORKDIR /my_app 
RUN pip3 install -r requirements.txt 
RUN npm install bower 
RUN python3 manage.py bower install 
RUN python3 manage.py collectstatic --no-input 

EXPOSE 8000 

COPY entrypoint.sh/
RUN chmod 755 /entrypoint.sh 

CMD python3 manage.py runserver 0.0.0.0:8000 
ENTRYPOINT ["/entrypoint.sh"] 

Djangoのエントリポイントスクリプト:

#!/bin/sh 

# Allow database container to start up or recover from a crash 
sleep 10 

cd /my_app 

# Run any pending migrations 
python3 manage.py migrate 

exec [email protected] 

ドッキングウィンドウ-compose.yml:

version: '2' 
services: 
    db: 
    image: postgres:9.6 
    volumes: 
     - ./db/pgdata:/pgdata 
    environment: 
     - POSTGRES_USER=my_user 
     - POSTGRES_PASSWORD=my_password 
     - PGDATA=/pgdata 
     - POSTGRES_DB=my_database 
    appserver: 
    image: my-image 
    command: python3 manage.py runserver 0.0.0.0:8000 
    ports: 
     - '8000:8000' 
    environment: 
     - POSTGRES_USER=my_user 
     - POSTGRES_PASSWORD=my_password 
     - POSTGRES_DB=my_database 
    links: 
     - db 
    depends_on: 
     - db 
+0

組み込みのDjango開発サーバーは、通常は運用システムには適していませんが、Dockerコンテナでは正しく動作しません。ルートとしてのものを実行することもベストプラクティスではありません。私はあなたが周りを遊んでインターネット上に置かないようにこれをやっていることを願っています。 http://blog.dscpl.com.au/2015/12/issues-with-running-as-pid-1-in-docker.html http://blog.dscpl.com.au/2015/12/don -run-as-root-inside-of-docker.html –

+0

@GrahamDumpletonこれはちょうどステップ1であり、それはすべて私のラップトップにあります。これらのすべての詳細を確認した後は、最終的にはuwsgi/nginxの設定になります。ノートに感謝します。 –

答えて

2

あなたの中CMDのためのexecの形式を使用しますDockerfile

が現在実行しようとしているの
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"] 

entrypoint.shスクリプト:動作していないよう

/bin/sh -c python3 manage.py runserver 0.0.0.0:8000 

、私はそれだけでpython3を実行していると思います。

quote the positional parameters variableする必要があります。スペースがあっても、シェルは各パラメータを維持します。

exec "[email protected]" 

しかし、それはドッキングウィンドウ、アプリ間でshを持っているので、常にCMDためのexecフォームを使用しないことをお勧めします。

+0

パーフェクト、ありがとう:) –

+0

probs .. 'exec'のための小さなアップデートもあります。 '$ @'は常に引用符で囲むべきです。 – Matt

関連する問題