exec: "gcc": 在 $PATH 中找不到可执行文件

cal*_*nai 5 google-app-engine go google-container-registry

我遇到一个问题,App Engine 项目将不再远程构建(通过gcloud app deploy

这是突然开始的,没有任何代码更改。不确定是否相关,但这是一个部署到 App Engine Flex 环境的 go 1.9 项目。

我不确定如何在与构建相同的环境中测试它,因为错误来自 Google 的容器注册表

这是来自 Container Registry 控制台的日志

starting build "73f85b4d-7370-41bd-bbb2-bcf42fc38873" 

FETCHSOURCE 
Fetching storage object: gs://staging.[project].appspot.com/us.gcr.io/[project]/appengine/default.1ed3c690ead06f27aa651a30fab342611:latest#1531698266413753 
Copying gs://staging.[project].appspot.com/us.gcr.io/[project]/appengine/default.1ed3c690ead49f731806f27aa630fab342611:latest#1531698266413753... 
Operation completed over 1 objects/1.7 MiB.  

BUILD 
Starting Step #0 
Step #0: Pulling image: gcr.io/gcp-runtimes/go1-builder@sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db 
Step #0: sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db: Pulling from gcp-runtimes/go1-builder 
Step #0: Digest: sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db 
Step #0: Status: Downloaded newer image for gcr.io/gcp-runtimes/go1-builder@sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db 
Step #0: exec: "gcc": executable file not found in $PATH Finished 
Step #0 ERROR ERROR: build step 0 "gcr.io/gcp-runtimes/go1-builder@sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db" failed: exit status 2
Run Code Online (Sandbox Code Playgroud)

Dav*_*ory 3

看起来您正在使用容器gcr.io/gcp-runtimes/go1-builder作为构建步骤。查看GitHub 中的源代码,我发现自 6 月底以来就没有任何更新。我在Dockerfile中看到指令中的基本映像FROMgcr.io/google-appengine/debian9:latest,并且查看该映像显示没有gcc安装。我没有看到安装 gcc 的步骤Dockerfile,并且查看您的构建步骤图像确认它不存在:

~$ docker run --rm -t -i --entrypoint /bin/bash gcr.io/gcp-runtimes/go1-builder@sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db -- which gcc
Unable to find image 'gcr.io/gcp-runtimes/go1-builder@sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db' locally
sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db: Pulling from gcp-runtimes/go1-builder
e154cec6816f: Pull complete 
<pulls elided>
Digest: sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db
Status: Downloaded newer image for gcr.io/gcp-runtimes/go1-builder@sha256:c62ac3fbec31ddec70601d6c5b44d07063bcff6a823bdcf5e0bbaa9d3799d1db
~$ 
Run Code Online (Sandbox Code Playgroud)

也许基础debian9镜像的早期版本已经安装了它,您可以深入历史记录来查看。但看起来最近没有对图像进行更改go1-builder来删除 gcc。

如果需要gcc,您始终可以将构建应用程序与部署应用程序分开。使用您自己的cloudbuild.yamlvia进行构建gcloud container builds submit,然后使用部署构建的容器。通过gcloud app deploy --image-url=...完全控制构建,您始终可以基于go-builder映像并安装所需的其他工具,就像gcc在使用 Docker 构建最终应用程序容器之前一样。