Dockerfile在本地运行正常但在Google Cloud Run上失败
我有一个Dockerfile,下面是它的内容:
FROM --platform=linux/amd64 prefecthq/prefect:2-python3.12
RUN apt-get update && apt-get -y install libpq-dev gcc
RUN pip install --upgrade pip
RUN pip install pipenv
ENV PREFECT_API_URL="foo"
ENV PREFECT_API_KEY="bar"
WORKDIR /app
COPY Pipfile Pipfile
COPY Pipfile.lock Pipfile.lock
RUN pipenv install --deploy --ignore-pipfile
COPY . .
CMD ["pipenv", "run", "python", "src/cdk_flow/cdk_delta_flow.py"]
这个文件在本地构建和运行都没问题,但当我把它推送到Google Cloud Run(使用Prefect来推送)时,它运行失败,出现了以下错误。
Traceback (most recent call last):
File "<frozen importlib._bootstrap_external>", line 995, in exec_module
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "/app/src/cdk_flow/cdk_delta_flow.py", line 7, in <module>
from src.cdk_flow.cdk_common_tasks import (
File "/app/src/cdk_flow/cdk_common_tasks.py", line 3, in <module>
import pandas as pd
ModuleNotFoundError: No module named 'pandas'
为什么这个Dockerfile在本地能运行,但在Google Cloud Run上却找不到某个模块呢?
1 个回答
0
在Dockerfile里面使用Pipenv
时,和Google Cloud Run不太兼容。为了避免出现找不到模块的错误,我们需要在Dockerfile里声明
ENV PIPENV_VENV_IN_PROJECT 1
。更多详细信息可以查看这个讨论帖