使用自定义 python 和 virtualenv 的 AppEngine Flex 实例部署失败

问题描述 投票:0回答:1

我尝试使用自定义运行时构建 AppEngine Flex 实例,包含

  • Python 3.11
  • 火狐

因此,在运行

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 警告?

Dockerfile

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 google-cloud-platform app-engine-flexible
1个回答
0
投票

在导致问题后,我无法部署在本地测试的不同配置作为 docker 容器,所有配置都停止在相同的错误消息处。

之后,我将目标版本更改为新的版本名称。已成功部署。因此,确认问题与配置无关。我认为某种缓存导致了 GCP 端的问题。

删除运行版本后终于部署到原来的版本,并重新部署。在这之间,我将流量定向到临时版本(在临时环境中没有必要)。

© www.soinside.com 2019 - 2024. All rights reserved.