我尝试使用自定义运行时构建 AppEngine Flex 实例,包含
因此,在运行
pip
来安装依赖项时,出现了一个警告,提示我正在以 root 身份运行 pip
,据我所知,pip 维护者不建议这样做,即使在容器内也是如此。
所以,为了解决这个问题,我对 Dockerfile 进行了更改。添加普通用户并授予文件权限并创建 virtualenv 来安装依赖项。
此后,当我尝试在本地运行该服务时,容器工作正常,但是当我将其推送到 AppEngine Flex 环境时,它失败并显示以下错误:
ERROR: (gcloud.app.deploy) Error Response: [9] An internal error occurred while processing task /app-engine-flex/flex_await_healthy/flex_await_healthy>2023-12-29T14:42:11.900Z145758.jc.2: /bin/sh: gunicorn: not found
我尝试在
app.yaml
文件中设置入口点,并在 virtualenv 中使用 gunicorn
的完整路径。这也部署失败。
之后,将
gunicorn
安装到系统python包中。这也失败了。
将 python 依赖项安装为系统包将解决该问题。但我应该坚持使用 virtualenv 还是忽略带有标志的 pip 警告?
FROM python:3.11.7-alpine
RUN apk update
RUN apk add firefox
RUN adduser -h /app -g "" -D appuser
USER appuser
WORKDIR /app
ADD --chown=appuser ./app/requirements.txt /app
RUN python -m venv venv
ENV PATH="/app/venv/bin:$PATH"
RUN pip install -r requirements.txt
ADD --chown=appuser ./app /app/
EXPOSE 8080
ENTRYPOINT /app/venv/bin/gunicorn -b :$PORT main:app
无论配置如何,现在都会出现错误。我已经删除了 virtualenv 的使用。并将 app.yaml 和 Dockerfile 恢复到上次成功状态,但失败并显示相同的错误。
我无法部署在 docker 容器中本地运行测试的不同配置,所有配置都停止在相同的错误消息处。
之后,我将目标版本更改为新的版本名称。已成功部署。因此,确认问题与配置无关。我认为某种缓存导致了 GCP 端的问题。
删除运行版本后终于部署到原来的版本,并重新部署。在这之间,我将流量定向到临时版本(在临时环境中没有必要)。