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