実現したいこと
Djangoでwebアプリケーションを開発しています。パッケージをpoetryで管理し、dockerfileでpoetry installをする仕組みを作りました。
発生している問題・分からないこと
poetry installしたdjangoが読み込めず、コンテナで以下のエラーが出てしまい、立ち上がりません。
また、gunicornもpoetryで管理していますが検知できていません。そのため、一時的にapt-get installでgunicornをインストールしてます
エラーメッセージ
error
12024-10-17 18:36:55 [2024-10-17 09:36:55 +0000] [1] [INFO] Starting gunicorn 20.1.0 22024-10-17 18:36:55 [2024-10-17 09:36:55 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1) 32024-10-17 18:36:55 [2024-10-17 09:36:55 +0000] [1] [INFO] Using worker: sync 42024-10-17 18:36:55 [2024-10-17 09:36:55 +0000] [7] [INFO] Booting worker with pid: 7 52024-10-17 18:36:55 [2024-10-17 09:36:55 +0000] [7] [ERROR] Exception in worker process 62024-10-17 18:36:55 Traceback (most recent call last): 72024-10-17 18:36:55 File "/usr/lib/python3/dist-packages/gunicorn/arbiter.py", line 589, in spawn_worker 82024-10-17 18:36:55 worker.init_process() 92024-10-17 18:36:55 File "/usr/lib/python3/dist-packages/gunicorn/workers/base.py", line 134, in init_process 102024-10-17 18:36:55 self.load_wsgi() 112024-10-17 18:36:55 File "/usr/lib/python3/dist-packages/gunicorn/workers/base.py", line 146, in load_wsgi 122024-10-17 18:36:55 self.wsgi = self.app.wsgi() 132024-10-17 18:36:55 ^^^^^^^^^^^^^^^ 142024-10-17 18:36:55 File "/usr/lib/python3/dist-packages/gunicorn/app/base.py", line 67, in wsgi 152024-10-17 18:36:55 self.callable = self.load() 162024-10-17 18:36:55 ^^^^^^^^^^^ 172024-10-17 18:36:55 File "/usr/lib/python3/dist-packages/gunicorn/app/wsgiapp.py", line 58, in load 182024-10-17 18:36:55 return self.load_wsgiapp() 192024-10-17 18:36:55 ^^^^^^^^^^^^^^^^^^^ 202024-10-17 18:36:55 File "/usr/lib/python3/dist-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp 212024-10-17 18:36:55 return util.import_app(self.app_uri) 222024-10-17 18:36:55 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 232024-10-17 18:36:55 File "/usr/lib/python3/dist-packages/gunicorn/util.py", line 384, in import_app 242024-10-17 18:36:55 mod = importlib.import_module(module) 252024-10-17 18:36:55 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 262024-10-17 18:36:55 File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module 272024-10-17 18:36:55 return _bootstrap._gcd_import(name[level:], package, level) 282024-10-17 18:36:55 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 292024-10-17 18:36:55 File "<frozen importlib._bootstrap>", line 1206, in _gcd_import 302024-10-17 18:36:55 File "<frozen importlib._bootstrap>", line 1178, in _find_and_load 312024-10-17 18:36:55 File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked 322024-10-17 18:36:55 File "<frozen importlib._bootstrap>", line 690, in _load_unlocked 332024-10-17 18:36:55 File "<frozen importlib._bootstrap_external>", line 940, in exec_module 342024-10-17 18:36:55 File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed 352024-10-17 18:36:55 File "/app/my_project/wsgi.py", line 12, in <module> 362024-10-17 18:36:55 from django.core.wsgi import get_wsgi_application 372024-10-17 18:36:55 ModuleNotFoundError: No module named 'django' 382024-10-17 18:36:55 [2024-10-17 09:36:55 +0000] [7] [INFO] Worker exiting (pid: 7) 392024-10-17 18:36:55 [2024-10-17 09:36:55 +0000] [1] [INFO] Shutting down: Master 402024-10-17 18:36:55 [2024-10-17 09:36:55 +0000] [1] [INFO] Reason: Worker failed to boot.
該当のソースコード
dockerfile
1# ビルドステージ 2FROM python:3.12-slim AS builder 3 4# Poetryのバージョンを環境変数で指定 5ENV POETRY_VERSION=1.8.3 6ENV PATH="/root/.local/bin:$PATH" 7 8# 必要なパッケージのインストール(PostgreSQL開発ツールを含む) 9RUN apt-get update \ 10 && apt-get install -y --no-install-recommends \ 11 curl \ 12 build-essential \ 13 postgresql-server-dev-all \ 14 && curl -sSL https://install.python-poetry.org | python3 - \ 15 && poetry config virtualenvs.create false \ 16 && rm -rf /var/lib/apt/lists/* 17 18WORKDIR /app 19COPY pyproject.toml poetry.lock /app/ 20RUN poetry install --no-root --verbose 21COPY . /app/ 22 23# 最終ステージ 24FROM python:3.12-slim 25 26# 必要なランタイムライブラリのみをインストール。 27# gunicornはpoetryで管理されているが、検知できなかったので一時的に再度installしている 28RUN apt-get update \ 29 && apt-get install -y --no-install-recommends \ 30 postgresql-client \ 31 gunicorn \ 32 && rm -rf /var/lib/apt/lists/* 33 34WORKDIR /app 35 36COPY --from=builder /root/.local /root/.local 37COPY --from=builder /app /app 38ENV PATH="/root/.local/bin:$PATH" 39EXPOSE 8000 40 41CMD [ "gunicorn", "--bind", "0.0.0.0:8000", "backend.wsgi:application"]
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
調べたことは下記の通りです
RUN poetry install --no-root --verbose
を実行し、コンテナ立ち上げ時にdjangoがinstallされていることを確認しました。
"/app/my_project/wsgi.py"内で別パッケージをインストールし、ModuleNotFoundError: No moduleとなることを確認しました。
このことから、poetryでinstallしたパッケージが全て読み込めていないと推測しています。
pyproject.tomlで、[tool.poetry.dependencies]にdjangoが記載されていることを確認しました。
lockファイルにもdjangoが記載されています。
補足
▪️ バージョン
poetry = "1.8.3"
python = "3.12"
django = "5.1.1"
回答1件
あなたの回答
tips
プレビュー