我有一個嘗試在 Docker 中運行的 Django REST 框架 API。該專案使用詩歌 1.1.12。運行時,我可以看到 Poetry 安裝正確,并且 Poetry 安裝了 my 中的包pyproject.toml,包括 Django。我正在使用主管使用 Daphne 運行 API,以及其他一些任務(如收集靜態檔案)。
但是,當主管運行應用程式時,我得到:
Traceback (most recent call last):
File "/home/docker/api/manage.py", line 22, in <module>
main()
File "/home/docker/api/manage.py", line 13, in main
raise ImportError(
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
Traceback (most recent call last):
File "/home/docker/api/manage.py", line 11, in main
from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'
注意我是如何設定POETRY_VIRTUALENVS_CREATE=false和ENV PATH="/root/.local/bin:${PATH}"的。根據詩歌安裝腳本,也就是需要添加到PATH的路徑。
這是我的 Dockerfile 的精簡版本:
FROM python:3.9-slim-buster
ENV PATH="/root/.local/bin:${PATH}"
RUN apt-get update && apt-get install -y --no-install-recommends \
... \
curl \
supervisor \
&& curl -sSL 'https://install.python-poetry.org' | python - && poetry --version \
&& apt-get remove -y curl \
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
&& apt-get clean -y && rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/apt/lists/*
COPY poetry.lock pyproject.toml /home/docker/api/
WORKDIR /home/docker/api
RUN if [ "$DEBUG" = "false" ] \
; then POETRY_VIRTUALENVS_CREATE=false poetry install --no-dev --no-interaction --no-ansi -vvv --extras "production" \
; else POETRY_VIRTUALENVS_CREATE=false poetry install --no-interaction --no-ansi -vvv --extras "production" \
; fi
COPY . /home/docker/api/
COPY .docker/services/api/files/supervisor.conf /etc/supervisor/conf.d/
CMD ["supervisord", "-n"]
這幾乎就是我看到其他人這樣做的方式。有任何想法嗎?
uj5u.com熱心網友回復:
可能是因為缺少DJANGO_SETTINGS_MODULE環境變數嗎?
uj5u.com熱心網友回復:
詩歌將自己記錄為非常非常努力地始終在虛擬環境中運行。但是,Docker 容器本身與其他 Python 隔離,在“系統”Python 中安裝包是正常的(也是最簡單的)。
有一個poetry export命令可以將 Poetry 的檔案轉換為普通的 piprequirements.txt檔案,然后你可以從那里RUN pip install進入你的 Dockerfile。您可以使用多階段 Dockerfile 來生成該檔案,而無需在主映像中實際包含 Poetry。
FROM python:3.9-slim-buster AS poetry
RUN pip install poetry
WORKDIR /app
COPY pyproject.toml poetry.lock .
RUN poetry export -f requirements.txt --output requirements.txt
FROM python:3.9-slim-buster
WORKDIR /app
COPY --from=poetry /app/requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["./manage.py", "runserver", "0.0.0.0:8000"]
django應該顯示在生成的requirements.txt檔案中,并且由于pip install將其安裝為“普通”“系統”Python 包,因此您的應用程式應該能夠正常查看它,而無需調整環境變數或其他設定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417352.html
標籤:
