Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 谷歌云运行错误:无效命令\“/bin/sh\";:从Docker映像部署时未找到文件_Google Cloud Platform_Fastapi_Google Cloud Run - Fatal编程技术网

Google cloud platform 谷歌云运行错误:无效命令\“/bin/sh\";:从Docker映像部署时未找到文件

Google cloud platform 谷歌云运行错误:无效命令\“/bin/sh\";:从Docker映像部署时未找到文件,google-cloud-platform,fastapi,google-cloud-run,Google Cloud Platform,Fastapi,Google Cloud Run,我正在尝试在Google Cloud上部署一个相当简单的Python web应用程序,该应用程序使用FastAPI和Gunicorn,并使用Docker容器运行。在部署后,我不断遇到相同的错误: Invalid ENTRYPOINT. [name: "gcr.io/<project_id>/<image_name>@sha256:xxx" error: "Invalid command \"/bin/sh\": file

我正在尝试在Google Cloud上部署一个相当简单的Python web应用程序,该应用程序使用FastAPI和Gunicorn,并使用Docker容器运行。在部署后,我不断遇到相同的错误:

Invalid ENTRYPOINT. [name: "gcr.io/<project_id>/<image_name>@sha256:xxx" error: "Invalid command \"/bin/sh\": file not found" ].
cloudbuild.yaml
步骤:
-名称:gcr.io/cloud-builders/docker
参数:[“build”、“--build arg”、“SETTINGS\u MODULE=app.SETTINGS\u production”、“-t”、“gcr.io/$PROJECT\u ID/”、“]
图像:
-gcr.io/$PROJECT\U ID/
gcloud builds submit--config=cloudbuild.yaml 更新 我用
debian:buster-slim
替换了
ubuntu:latest
(==
20.04
),它成功了

以前 部署到云运行时,我也收到了错误…我怀疑是
端口
,正在调查。不是
端口
。奇怪的是,图像在本地运行。尝试一个不同的操作系统

我在一个项目中重新创建了您的
Dockerfile
cloudbuild.yaml
,构建和运行成功:

docker运行\
--交互式--tty\
--环境=端口=8888\
gcr.io/${PROJECT}/67486954
[2021-05-11 16:09:44+0000][1][INFO]启动gunicorn 20.1.0
[2021-05-11 16:09:44+0000][1][INFO]收听地址:http://0.0.0.0:8888 (1)
注意要从
Dockerfile
生成,您不需要创建
cloudbuild.yaml
,只需
gcloud builds submit——标记gcr.io/PROJECT\u ID/…

诊断问题的一个好方法是在本地运行
docker build

docker构建\
--build arg=SETTINGS\u MODULE=app.SETTINGS\u production\
--tag=gcr.io/$PROJECT\u ID/\
.
然后尝试运行它:

docker运行\
--交互式--tty--rm\
gcr.io/$PROJECT\U ID/
这将云构建隔离为问题,并可能导致相同的错误

错误表明容器没有在
ubuntu:latest
图像中找到shell(
/bin/sh
),这很奇怪

我想你可以|应该在'CMD'之后去掉'exec'` 注意我通读了谷歌的教程,看到其中的说明包括
CMD exec…
,我不清楚为什么这是必要的,但大概这不是问题

您能否在本地运行
gunicorn
命令而不出现问题

/usr/local/bin/gunicorn-b:$PORT-w 4-k uvicorn.workers.UvicornWorker app.main:app--chdir/code
--chdir/code
的位置也很奇怪。那么:

WORKDIR code
COPY . .

...

CMD /usr/local/bin/gunicorn -b :$PORT -w 4 -k uvicorn.workers.UvicornWorker app.main:app
Hmmm可能会将
--chdir
移动到
app.main:app
之前,使其应用于
gunicorn
而不是您的应用程序

/usr/local/bin/gunicorn-b:$PORT-w 4-k uvicorn.workers.UvicornWorker--chdir/code-app.main:app

我使用
cloudbuild.yaml
的唯一原因是,我无法找到将
--build arg
命令传递给映像构建的另一种方法。我试图用
debian:buster slim
替换
ubuntu:latest
,构建成功,但是web应用的URL给了我一个
服务不可用
,所以我想现在的问题可能是端口和/或db连接问题。我将图像推到容器注册表,并将其拉出来,然后尝试使用它运行
docker run--rm--name gcr nobg container-p 80:8080--env file.env gcr.io/$PROJECT_ID/
,图像中的命令是
CMD exec gunicorn-b:$PORT-w 4-k uvicorn.workers.UvicornWorker-app.main:app
,其中
$PORT
是云端运行时自动生成的env变量,一切正常。但它在云运行中不起作用。我得到相同的
错误:“无效命令\”/bin/bash\“:未找到文件”
。我在这里遗漏了什么?没有更多的信息,我不可能回答。你确信你使用的是基于Debian而不是麻烦的Ubuntu基础的图像吗?您使用的是什么云运行部署命令?也许可以创建一个新问题并发布详细信息,包括您的
gcloud run deploy
命令?我使用了原始问题(
gcloud builds submit…
)中的所有内容,但按照您的建议,用debian替换了ubuntu映像。DazWilkin,我接受了您的答案,因为您的解决方案解决了我的大部分问题。非常感谢。
WORKDIR code
COPY . .

...

CMD /usr/local/bin/gunicorn -b :$PORT -w 4 -k uvicorn.workers.UvicornWorker app.main:app