从Cloud Build内部运行gcloud run deploy导致错误

时间:2020-05-24 17:10:56

标签: google-cloud-platform cloud google-cloud-build google-cloud-run

我在Google Cloud Build中有一个自定义构建步骤,该步骤首先构建docker映像,然后将其部署为云运行服务。

最后一步失败,输出以下日志;

步骤2:部署...步骤2:设置IAM策略.........完成步骤 2:创建修订版.................................... ................................................... .....................................失败 步骤2:部署失败步骤2:错误:(gcloud.run.deploy)云 运行错误:无效的参数错误。无效的ENTRYPOINT。 [名称: “ gcr.io/opencobalt/silo@sha256:fb860e758eb1957b90ff3761fcdf68dedb9d10f832f2bb21375915d3de2aaed5” 步骤2:错误:“无效命令\” / bin / sh \”:找不到文件”步骤2: ]。完成步骤2的错误错误:构建步骤2 “ gcr.io/cloud-builders/gcloud”失败:步骤退出,非零 状态:1

构建步骤如下:

[“ run”,“ deploy”,“ silo”,“-image”,“ gcr.io/opencobalt/silo"、"--region"、"us-central1"、"--platform”, “托管”,“-未经验证的允许”]}

该映像已构建,并且已存在于注册表中,并且如果我更改了最后一个构建步骤以部署计算引擎VM,它将起作用。这些构建步骤如下所示:

{“名称”:“ gcr.io/cloud-builders/gcloud”,“ args”:[“计算”,“实例”, “使用容器创建”,“ silo”,“-容器图像”,“ gcr.io/opencobalt/silo”,“-zone”,“ us-central1-a”,“-tags”, “ silo,pharo”]}

我也可以在本地生成映像,但是在运行gcloud run local时遇到相同的错误。

我正在尝试找出解决此问题的方法。该映像有效,因为它在本地运行良好,并且在作为Compute Engine VM部署时运行良好,该错误仅在我尝试将映像部署为Cloud Run服务时显示。

(已添加)Dockerfile看起来像这样;

######################################
# Based on Ubuntu image
######################################
FROM ubuntu

######################################
# Basic project infos
######################################
LABEL maintainer="PeterSvensson"

######################################
# Update Ubuntu apt and install some tools
######################################
RUN  apt-get update \
  && apt-get install -y wget \
  && apt-get install -y git \
  && apt-get install -y unzip \
  && rm -rf /var/lib/apt/lists/*

######################################
# Have an own directory for the tool
######################################
RUN mkdir webapp
WORKDIR webapp

######################################
# Download Pharo using Zeroconf & start script
######################################
RUN wget -O- https://get.pharo.org/64/80+vm | bash

COPY service_account.json service_account.json
RUN export certificate="$(cat service_account.json)"
COPY load.st load.st
COPY setup.sh setup.sh
RUN chmod +x setup.sh
RUN ./setup.sh; echo 0

RUN ./pharo Pharo.image load.st; echo 0

######################################
# Expose port 8080 of Zinc outside the container
######################################
EXPOSE 8080

######################################
# Finally run headless as server
######################################
CMD ./pharo --headless Pharo.image --no-quit

热烈欢迎任何建议。 谢谢。

3 个答案:

答案 0 :(得分:1)

经过大量测试,我设法走得更远。似乎/ bin / sh丢失的文件是红色鲱鱼。

我尝试将启动命令从CMD更改为ENTRYPOINT,因为该错误中提到了该命令,但它不起作用。但是,当我将启动指令复制到新文件“ startup.sh”并将Dockerfile的最后一行更改为;

ENTRYPOINT ./startup.sh

确实有效。我当然需要chmod + x新文件,但是奇怪的是ENTRYPOINT ./pharo --headless Pharo.image --no-quit给出了同样的错误,甚至ENTRYPOINT [“ ./pharo”,“- -headless”,“ Pharo.image”,“-no-quit”]也出现了相同的错误。

但是仅对ENTRYPOINT进行一个争论就可以使云运行正常。走吧。

答案 1 :(得分:1)

另请参阅:

Unable to deploy Ubuntu 20.04 Docker container on Google Cloud Run

我的解决方法是使用直接调用Python而不是Shell(/ bin / sh或/ bin / bash)的CMD指令。到目前为止,一切正常。

答案 2 :(得分:0)

看来Google Cloud Run不喜欢ubuntu:20.04图片。我对Play框架应用程序有完全相同的问题。

命令

ENTRYPOINT /opt/play-codecheck/bin/play-codecheck -Dconfig.file=/opt/codecheck/production.conf

失败

error: "Invalid command \"/bin/sh\": file not found"

我也尝试过

ENTRYPOINT ["/bin/bash", "/opt/play-codecheck/bin/play-codecheck", "-Dconfig.file=/opt/codecheck/production.conf"]

并获得了奖励

error: "Invalid command \"/bin/bash\": file not found"

将命令放在shell脚本中的技巧对我也不起作用。但是,当我改变

FROM ubuntu:20.04

FROM ubuntu:18.04

已部署的映像。在这一点上,这对我来说是可以接受的解决方案,但看来Google需要解决该问题。