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

5
我遇到了一个问题,App Engine 项目无法通过远程方式(通过 gcloud app deploy)进行构建。
这个问题突然出现,没有任何代码更改。不确定是否相关,但它是一个部署到 App Engine Flex 环境的 go 1.9 项目。
我不知道如何在相同的环境中测试此问题,因为错误来自于 Google 的容器注册表。
这是容器注册表控制台的日志。
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

你能检查一下你的~/.bashrc文件中的PATH值吗?它是否包含/usr/bin? - VonC
在我的~/.bashrc文件中还是远程的?我不知道如何访问GCR中正在运行的实例... - calcinai
远程的。 - VonC
有没有可能在 GCR 中访问远程 shell?我想这真的是我的问题,如果我能进去看看,也许我就能修复它了。 - calcinai
我已经查看了文档,但没有找到任何具体的参考资料。你知道是否可以在本地测试 gcr.io 镜像吗?即使我成功了,并且修复了 PATH,我也看不到修改 Google 容器模板的方法。 - calcinai
显示剩余3条评论
1个回答

3
看起来您正在使用容器gcr.io/gcp-runtimes/go1-builder作为构建步骤。查看GitHub中的源代码,我发现自六月底以来没有更新。我在Dockerfile中看到FROM指令中的基础镜像是gcr.io/google-appengine/debian9:latest,查看该镜像发现没有安装gcc。我在Dockerfile中没有看到安装gcc的步骤,查看您的构建步骤镜像也证实了它不存在。
~$ 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
~$ 

也许之前的基础debian9镜像版本中安装了gcc,你可以查看历史记录。但现在看起来,go1-builder镜像没有最近更改去除gcc。
如果您需要gcc,您可以将构建应用程序与部署分开。通过使用gcloud container builds submit和自己的cloudbuild.yaml构建,然后使用gcloud app deploy --image-url=...部署构建好的容器。通过完全控制构建过程,您可以始终依据go-builder镜像,并在其上安装额外的工具,例如gcc,然后使用Docker构建最终的应用程序容器。

我想这是我的最佳选择。看起来很奇怪,Google的构建镜像甚至无法构建App Engine SDK!(当我将其作为依赖项删除时,部署正常) - calcinai
我提交了这个问题:https://github.com/GoogleCloudPlatform/golang-docker/issues/141;如果这对你很重要,他们无疑会接受拉取请求... - David Bendory
另一个选项是更改 app.yaml 以使用 runtime: custom 并创建自己的 Dockerfile,使用您喜欢的镜像来构建应用程序:FROM golang:latest RUN mkdir /app ADD . /app/ WORKDIR /app RUN go build -o main . CMD ["/app/main"] - Montaro
在尝试在Google Cloud平台上部署“Hello World!”示例教程失败后,到这里来了。结果我需要使用自己的cloudbuild.yaml构建,或者创建自己的Dockerfile和镜像,或者找出gcc依赖项在哪里。欢迎来到入门级别。 - simonpa71

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接