質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Gunicorn

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

6135閲覧

DockerでGunicornが起動しない(Django) ※Module"プロジェクト名"が無い

kooo0401

総合スコア6

Gunicorn

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/12/18 10:39

編集2019/12/19 04:43

前提・実現したいこと

Dockerを用いたgcp(gke)デプロイの為、
開発環境と本番環境でDockerfile等を分けたが本番環境用コンテナ起動不可
※Gunicorn起動エラー

(Python/Django/Docker/Gunicorn/Nginx)

発生している問題・エラーメッセージ

dockerlogs

1django | ModuleNotFoundError: No module named 'jointparty'※プロジェクト名 2django | [2019-12-18 10:04:17 +0000] [7] [INFO] Worker exiting (pid: 7) 3django | [2019-12-18 10:04:17 +0000] [1] [INFO] Shutting down: Master 4django | [2019-12-18 10:04:17 +0000] [1] [INFO] Reason: Worker failed to boot.
下記docker-compose.prod.ymlのこちらの記述でエラー発生 "command: gunicorn jointparty.wsgi:application --bind 0.0.0.0:8000"

該当のソースコード

dockercomposeprodyml

1version: '3.7' 2 3services: 4 django: 5 build: 6 context: . 7 dockerfile: Dockerfile.prod 8 # ↓起動順番を調整(本来はentrypoint.shで処理すべき)20191218 9 depends_on: 10 - postgres 11 - nginx 12 # サービス起動後に入力されるコマンドを設定 13 command: gunicorn jointparty.wsgi:application --bind 0.0.0.0:8000 14 15 volumes: 16 - static_volume:/usr/src/app/staticfiles 17 expose: 18 - 8000 19 env_file: .env.prod 20 depends_on: 21 - postgres 22 23 postgres: 24 image: postgres:12.0-alpine 25 volumes: 26 - ./postgres_data:/var/lib/postgresql/data 27 env_file: .env.prod.db 28 29 nginx: 30 build: ./nginx 31 volumes: 32 - static_volume:/usr/src/app/staticfiles 33 ports: 34 - 1400:80 35 depends_on: 36 - django 37 38volumes: 39 postgres_data: 40 static_volume: 41

試したこと

2日間近く色々試して頭がパンクしました。。
Pythonを学習初めて数週間なのですが、Dockerに手を出して打ちのめされています。
dockerに入りshellコマンドで

# cd app && gunicorn jointparty.wsgi:application --bind 0.0.0.0:8000 [2019-12-18 10:34:25 +0000] [15] [INFO] Starting gunicorn 20.0.4 [2019-12-18 10:34:25 +0000] [15] [INFO] Listening at: http://0.0.0.0:8000 (15) [2019-12-18 10:34:25 +0000] [15] [INFO] Using worker: sync [2019-12-18 10:34:25 +0000] [17] [INFO] Booting worker with pid: 17 /usr/local/lib/python3.8/site-packages/environ/environ.py:637: UserWarning: Error reading .env - if you're not configuring your environment separately, check this. warnings.warn(

このように別のエラーが発生します。
docker関係のファイルでディレクトリがどうなっているのかどう試しても上手くいきません。。
当たり前かもしれませんが、上記エラー発生するコマンドを
"command: python app/manage.py runserver 0.0.0.0:8000"
こちらに変えるとエラーなく起動します。

wsgi.pyの設定なのかsettings.pyなのか、、
情報が曖昧で大変申し訳ございませんが、お助け頂けたらと思います。

よろしくお願い致します。

20191219追加情報(dockerログ)

dockerログの全体を追記します

dockerps

1 Name Command State Ports 2---------------------------------------------------------------------------------------------- 3docker-with-django_django_1 gunicorn jointparty.wsgi:a ... Exit 3

logs

1django_1 | [2019-12-19 03:18:32 +0000] [1] [INFO] Starting gunicorn 20.0.4 2django_1 | [2019-12-19 03:18:32 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1) 3django_1 | [2019-12-19 03:18:32 +0000] [1] [INFO] Using worker: sync 4django_1 | [2019-12-19 03:18:32 +0000] [7] [INFO] Booting worker with pid: 7 5django_1 | [2019-12-19 03:18:32 +0000] [7] [ERROR] Exception in worker process 6django_1 | Traceback (most recent call last): 7django_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker 8django_1 | worker.init_process() 9django_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 119, in init_process 10django_1 | self.load_wsgi() 11django_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi 12django_1 | self.wsgi = self.app.wsgi() 13django_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi 14django_1 | self.callable = self.load() 15django_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 49, in load 16django_1 | return self.load_wsgiapp() 17django_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp 18django_1 | return util.import_app(self.app_uri) 19django_1 | File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 358, in import_app 20django_1 | mod = importlib.import_module(module) 21django_1 | File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module 22django_1 | return _bootstrap._gcd_import(name[level:], package, level) 23django_1 | File "<frozen importlib._bootstrap>", line 1014, in _gcd_import 24django_1 | File "<frozen importlib._bootstrap>", line 991, in _find_and_load 25django_1 | File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked 26django_1 | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed 27django_1 | File "<frozen importlib._bootstrap>", line 1014, in _gcd_import 28django_1 | File "<frozen importlib._bootstrap>", line 991, in _find_and_load 29django_1 | File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked 30django_1 | ModuleNotFoundError: No module named 'jointparty' 31django_1 | [2019-12-19 03:18:32 +0000] [7] [INFO] Worker exiting (pid: 7) 32django_1 | [2019-12-19 03:18:32 +0000] [1] [INFO] Shutting down: Master 33django_1 | [2019-12-19 03:18:32 +0000] [1] [INFO] Reason: Worker failed to boot. 34

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

とりあえず解決しました!!
docker内のディレクトリ構造が全然理解できてなかったのですが
下記構成にdockerfile.prodとdocker-compose.prod.yml内を変更して
commandをentrypoint.prod.sh内に記載して別エラーに変化しました。

※一部抜粋

dockerfileprod

1 2WORKDIR /usr/src 3 4COPY Pipfile /usr/src/Pipfile 5COPY Pipfile.lock /usr/src/Pipfile.lock 6 7COPY entrypoint.sh /usr/src/entrypoint.sh 8 9COPY . /usr/src/ 10 11ENTRYPOINT ["/usr/src/entrypoint.prod.sh"]

dockercomposeprodyml

1services: 2 django: 3 build: 4 context: . 5 dockerfile: Dockerfile.prod 6 depends_on: 7 - postgres 8 - nginx 9 # サービス起動後に入力されるコマンドを設定 10 # command: gunicorn jointparty.wsgi:application --bind 0.0.0.0:8000 11

entrypointprodsh

1#!/bin/sh 2 3if [ "$DATABASE" = "postgres" ] 4then 5 echo "Waiting for postgres..." 6 7 while ! nc -z $DATABASE_HOST $DATABASE_PORT; do 8 sleep 0.1 9 done 10 11 echo "PostgreSQL started" 12fi 13 14cd app && gunicorn jointparty.wsgi:application --bind 0.0.0.0:8000 15 16exec "$@"

※現状エラー

logs

1(docker-with-django) bash-3.2$ docker-compose -f docker-compose.prod.yml logs 2Attaching to docker-with-django_nginx_1, docker-with-django_django_1, docker-with-django_postgres_1 3django_1 | [2019-12-19 04:31:09 +0000] [6] [INFO] Starting gunicorn 20.0.4 4django_1 | [2019-12-19 04:31:09 +0000] [6] [INFO] Listening at: http://0.0.0.0:8000 (6) 5django_1 | [2019-12-19 04:31:09 +0000] [6] [INFO] Using worker: sync 6django_1 | [2019-12-19 04:31:09 +0000] [8] [INFO] Booting worker with pid: 8 7django_1 | /usr/local/lib/python3.8/site-packages/environ/environ.py:637: UserWarning: Error reading .env - if you're not configuring your environment separately, check this. 8django_1 | warnings.warn( 9

お助け頂いてありがとうございました!
引き続きエラー解決に努めます!

投稿2019/12/19 04:39

kooo0401

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考サイトにあるように、

wsgi.py ファイル内の application というWSGIアプリケーションを起動

のコマンドが、

gunicorn wsgi:application

のようです。

つまり、
gunicorn jointparty.wsgi:application というコマンドであるなら、

./jointparty/wsgi.py というファイルがあるはずなのですが、ありますか?

投稿2019/12/19 03:46

tashua314

総合スコア145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kooo0401

2019/12/19 03:51

app/jointparty/wsgi.pyがあります!
kooo0401

2019/12/19 03:51

補足情報に載せてあるGitHubのディレクトリ構成になります!
guest

0

docker というか、gunicornの起動方法の間違いのようですね。

参考サイト
https://blog.hirokiky.org/entry/2018/10/06/151830

ディレクトリ構成はどうなっていますか?
起動しようとしているファイルはなんですか?
(カレントディレクトリは)どこでコマンドを実行しようとしていますか?

投稿2019/12/19 00:14

tashua314

総合スコア145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kooo0401

2019/12/19 03:14 編集

ありがとうございます。 command部分をコメントアウトして、停止中のコンテナに入り確認すると --------------------------------------------------------------------------- # pwd /app # ls Dockerfile Pipfile app cloudbuild.yaml docker-compose.prod.yml entrypoint.prod.sh media photos Dockerfile.prod Pipfile.lock cloud_sql_proxy deployment.yaml docker-compose.yml entrypoint.sh nginx postgres_data --------------------------------------------------------------------------- こちらの状態です。ただし、この状態で下記コマンドを打つとエラー(おそらく別の)が出ます。 --------------------------------------------------------------------------- # cd app && gunicorn jointparty.wsgi:application --bind 0.0.0.0:8000 --------------------------------------------------------------------------- 別エラーでも一歩進むかなと実際にdocker-compose.prod.ymlファイルに同じ記述をすると --------------------------------------------------------------------------- ERROR: for docker-with-django_django_1 Cannot start service django: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"cd\": executable file not found in $PATH": unknown ERROR: for django Cannot start service django: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"cd\": executable file not found in $PATH": unknown ERROR: Encountered errors while bringing up the project. --------------------------------------------------------------------------- が発生します。引き続き調べますので、よろしくお願い致します。
guest

0

参考サイトにあるように、

wsgi.py ファイル内の application というWSGIアプリケーションを起動

のコマンドが、

gunicorn wsgi:application

のようです。

つまり、

投稿2019/12/19 03:44

tashua314

総合スコア145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問