cra*_*e99 6 python docker google-cloud-run
这是我的 Dockerfile:
# Use lightweight Python image
FROM python:3.9-slim
ARG DOCKER_ENV
# PYTHONFAULTHANDLER=1 - Display trace if a sefault occurs.
# PYTHONUNBUFFERED=1 - Allow statements and log messages to immediately appear in the Knative logs
# PIP_NO_CACHE_DIR=off - Disable pip cache for smaller Docker images.
# PIP_DISABLE_PIP_VERSION_CHECK=on - Ignore pip new version warning.
# PIP_DEFAULT_TIMEOUT=100 - Give pip longer than the 15 second timeout.
ENV DOCKER_ENV=${DOCKER_ENV} \
PYTHONFAULTHANDLER=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100
# Install poetry
RUN pip install
# Set working directory in container to /app
WORKDIR /app
# Copy only dependency requirements to container to cache them in docker layer
COPY poetry.lock pyproject.toml /app/
# Don't need virtualenv because environment is already isolated in a container
RUN poetry config virtualenvs.create false
# Install production dependencies
RUN poetry install --no-dev --no-ansi
# Copy app into container
COPY . /app
# Run server
CMD [ "poetry", "run" , "python", "api.py"]
Run Code Online (Sandbox Code Playgroud)
我可以在本地构建和部署它,没有问题,并且服务器启动。但是,当我部署到 Cloud Run 时,出现以下错误并且容器失败:
Creating virtualenv indie-9TtSrW0h-py3.9 in /home/.cache/pypoetry/virtualenvs
File "/app/api.py", line 6, in <module>
import jwt
ModuleNotFoundError: No module named 'jwt'
Run Code Online (Sandbox Code Playgroud)
有人知道为什么它在本地成功运行但在 Cloud Run 中缺少依赖项吗?一件奇怪的事情是我明确告诉 docker 不要在 Dockerfile 中使用虚拟环境。当我在本地运行映像时,这是有效的,但在 Google Cloud 上,它仍然坚持构建虚拟环境。是否与我在这里缺少的 Google Cloud Run 版本的 Docker 和诗歌存在某种不兼容?
似乎出于某种原因,Cloud RunCMD在与Dockerfile. 这就是为什么poetry认为应该创建一个新的 virtualenv。
(它在 2021 年 11 月 21 日对我有效)
代替
CMD [ "poetry", "run" , "python", "api.py"]
Run Code Online (Sandbox Code Playgroud)
使用:
CMD ["python", "api.py"]
Run Code Online (Sandbox Code Playgroud)
它应该可以工作,因为您的依赖项已经在没有 virtualenv 的poetry情况下安装,因此您现在不再需要。
| 归档时间: |
|
| 查看次数: |
1580 次 |
| 最近记录: |