繁体   English   中英

Docker 容器在本地运行但在 Cloud Run 上失败

[英]Docker container runs locally but fails on Cloud Run

我将项目从 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 容器的行为有何不同?

UPD:我的 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"]

HOME=/root添加到 CMD,为我解决了问题。

CMD HOME=/root poetry run python main.py

显然 home 设置不正确,这是一个已知问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM