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

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

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

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

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Django

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

Docker

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

Q&A

解決済

1回答

187閲覧

dockerfile内でpoetry installしたパッケージが読み込めない

daihuku_desu

総合スコア1

Gunicorn

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

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Django

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

Docker

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

0グッド

0クリップ

投稿2024/10/17 10:46

編集2024/10/17 14:25

実現したいこと

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"

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

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

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

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

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

katsuko

2024/10/17 12:41

apt でインストールしたgunicornは、aptで入れたpythonでしか使えません。(正確には違うけど、おおよそそう思っていいです) 「gunicornはpoetryで管理されているが、検知できなかった」という問題を解決した方がいいと思います。 その問題について説明を、質問文を編集して付け加えてはいかがですか。
daihuku_desu

2024/10/17 14:26

コメントありがとうございます。知りませんでした。追記いたしました。
guest

回答1

0

自己解決

マルチステージビルドを諦めました。解決とさせていただきます。

Dockerfile

1FROM python:3.12-slim 2 3ENV POETRY_VERSION=1.8.3 4ENV PATH="/root/.local/bin:$PATH" 5 6RUN apt-get update \ 7 && apt-get install -y --no-install-recommends \ 8 curl \ 9 build-essential \ 10 postgresql-server-dev-all \ 11 postgresql-client \ 12 && curl -sSL https://install.python-poetry.org | python3 - \ 13 && poetry config virtualenvs.create false \ 14 && rm -rf /var/lib/apt/lists/* 15 16WORKDIR /app 17 18COPY pyproject.toml poetry.lock /app/ 19 20RUN poetry install --no-root --verbose 21 22COPY . /app/ 23 24EXPOSE 8000 25 26CMD [ "poetry", "run", "gunicorn", "--bind", "0.0.0.0:8000", "backend.wsgi:application"] 27

投稿2024/10/17 14:53

daihuku_desu

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問