我把项目从PIP迁移到Poetry,但我的Docker容器在Google Cloud Run上无法运行。
Docker中的最后一个字符串:
CMD ["poetry", "run", "uwsgi", "--http-socket", "0.0.0.0:80", "--wsgi-file", "/server/app/main.py", "--callable", "app", "-b 65535"]
它在本地工作,在其他笔记本电脑上工作,在Cloud Run Emulator上工作,但是当我尝试在Cloud Run上运行时失败了。
这是一个Cloud Run的日志:
Creating virtualenv my-project-xTUGyw3C-py3.8 in /home/.cache/pypoetry/virtualenvs
FileNotFoundError
[Errno 2] No such file or directory: b'/bin/uwsgi'
at /usr/local/lib/python3.8/os.py:601 in _execvpe
597│ path_list = map(fsencode, path_list)
598│ for dir in path_list:
599│ fullname = path.join(dir, file)
600│ try:
→ 601│ exec_func(fullname, *argrest)
602│ except (FileNotFoundError, NotADirectoryError) as e:
603│ last_exc = e
604│ except OSError as e:
605│ last_exc = e
Container called exit(1).
已经正确设置了端口,没有使用任何环境变量。我没有使用容器卷,也没有通过COPY将文件传递给Docker。
日志显示应用程序找不到uwsgi文件。本地版本中也不存在该文件,但是它可以正常运行而没有任何错误。
这个Docker容器如何可能表现出不同的行为?
更新:我的Docker文件
FROM python:3.8
WORKDIR server
ENV PYTHONPATH $PYTHONPATH:/server
RUN pip install poetry==1.1.11
COPY poetry.lock /server
COPY pyproject.toml /server
RUN poetry install
EXPOSE 80
COPY /data /server/data
COPY /test /server/test
COPY /app /server/app
CMD ["poetry", "run", "uwsgi", "--http-socket", "0.0.0.0:80", "--wsgi-file", "/server/app/main.py", "--callable", "app", "-b 65535"]