google-cloud-platform - 从 Cloud Build 内部运行 gcloud run deploy 会导致错误

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

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

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

Step #2: Deploying... Step #2: Setting IAM Policy.........done Step 2: Creating Revision............................................................................................................................failed Step #2: Deployment failed Step #2: ERROR: (gcloud.run.deploy) Cloud Run error: Invalid argument error. Invalid ENTRYPOINT. [name: "gcr.io/opencobalt/silo@sha256:fb860e758eb1957b90ff3761fcdf68dedb9d10f832f2bb21375915d3de2aaed5" Step #2: error: "Invalid command \"/bin/sh\": file not found" Step #2: ]. Finished Step #2 ERROR ERROR: build step 2 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1

构建步骤如下所示;

["run","deploy","silo","--image","gcr.io/opencobalt/silo","--region","us-central1","--platform","managed","--allow-unauthenticated"]}

该镜像是在注册表中构建的,如果我更改最后一个构建步骤以部署计算引擎 VM,则它可以工作。这些构建步骤如下所示;

{"name":"gcr.io/cloud-builders/gcloud","args":["compute","instances", "create-with-container","silo","--container-image","gcr.io/opencobalt/silo","--zone","us-central1-a","--tags","silo,pharo"]}

我也可以在本地构建镜像,但在本地运行 gcloud run deploy 时遇到相同的错误。

我正在试图弄清楚如何解决这个问题。该镜像工作正常,因为它在本地运行良好,并且在部署为 Compute Engine 虚拟机时运行良好,因此该错误仅在我尝试将镜像部署为 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

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

最佳答案

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

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

入口点./startup.sh

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

但是只有一个 ENTRYPOINT 参数可以让云运行工作。去图吧。

关于google-cloud-platform - 从 Cloud Build 内部运行 gcloud run deploy 会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61989516/

相关文章:

go - Cloud-Run 进程失败,出现 500 状态代码和 membarrier gvisor 错误

amazon-web-services - 是否可以在 docker 容器上安装 AWS FSX 存储?

java - 云服务器运行Java代码

git - 如何在 GitHub ref/pull/*/merge 分支事件上触发 Google Cloud Build

firebase - 由于Cloud Build API,Firebase Cloud Functions是否要求在2020年4月20日之前启用计费功能?

google-chrome - 在不跨步骤共享的云构建步骤中安装 google-chrome(使用卷)

authentication - 在Go应用程序中使用服务帐户json key 文件时获取 `Request had invalid authentication credentials`

ruby - 使用 Drive API 创建空文件

google-cloud-platform - 如何立即删除 GCP 项目?

azure - 如何在 Azure VM 中创建多个帐户?