gpt4 book ai didi

docker - 无法在 Google Cloud Run 上部署 Ubuntu 20.04 Docker 容器

转载 作者:行者123 更新时间:2023-12-02 18:00:40 25 4
gpt4 key购买 nike

我正在尝试通过 Google Cloud Run 部署一个基于 Ubuntu 20.04 的简单的基于 Python 的 Docker 容器。我已经成功构建了镜像,但是当我尝试部署 Cloud Run 服务时,我收到以下错误(省略了项目详细信息):

Cloud Run error: Invalid argument error. Invalid ENTRYPOINT. [name: "gcr.io/{PROJECT_ID}/{SERVICE_NAME}@sha256:{HASH}"
error: "Invalid command \"/bin/sh\": fil
e not found"
e not found"
]....failed
Deployment failed

不过,奇怪的是,如果我在本地拉取并运行图像,它就可以正常工作。
docker run --rm --publish 5000:5000 -e PORT=5000 -it gcr.io/{PROJECT_ID}/{SERVICE_NAME}@sha256:{HASH}

我的 Dockerfile 几乎是最基本的:
FROM ubuntu:20.04

COPY . /app
WORKDIR /app

RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y python3 python3-pip \
&& pip3 install gunicorn Flask flask-cors

CMD exec gunicorn --bind :$PORT --worker-tmp-dir /dev/shm --timeout 900 wsgi:app

更奇怪的是,如果我将基础图像替换为 debian:buster-slim ,它工作得很好。

有谁知道会发生什么?

附加信息:

status:
conditions:
- type: Ready
status: 'False'
message: |-
Cloud Run error: Invalid argument error. Invalid ENTRYPOINT. [name: "gcr.io/{PROJECT_ID}/{SERVICE_NAME}@sha256:{HASH}"
error: "Invalid command \"/bin/sh\": file not found"
].
lastTransitionTime: '2020-05-12T07:40:12.804Z'
- type: ConfigurationsReady
status: 'False'
message: |-
Cloud Run error: Invalid argument error. Invalid ENTRYPOINT. [name: "gcr.io/{PROJECT_ID}/{SERVICE_NAME}@sha256:{HASH}"
error: "Invalid command \"/bin/sh\": file not found"
].
lastTransitionTime: '2020-05-12T07:40:12.804Z'
- type: RoutesReady
status: 'True'
lastTransitionTime: '2020-05-12T06:19:12.224Z'

最佳答案

我遇到了同样的问题。似乎是断断续续的:白天我无法部署到 Cloud Run,但在深夜,各种变通办法大约有一半的时间起作用。
我发现最可靠的解决方法是在 CMD 或 ENTRYPOINT 中不依赖/bin/sh 或/bin/bash。/bin/sh 似乎在运行时存在,但有时在 Cloud Run 在部署前测试容器时不存在。
而不是在 Dockerfile 中:

CMD exec gunicorn --bind :$PORT --workers 1 --threads 4 main:app
我改用这个:
CMD ["/usr/bin/python3", "/app/run_gunicorn.py", "--workers", "1", "--threads", "4", "main:app"]
然后我添加了 run_gunicorn.py 脚本:
import os
import sys
from gunicorn.app.wsgiapp import run
port = os.environ['PORT']
sys.argv[-1:-1] = ['--bind', f':{port}']
print("sys.argv:", sys.argv)
run()
这是保持端口号动态的一种方法。

关于docker - 无法在 Google Cloud Run 上部署 Ubuntu 20.04 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61744540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com