exec: gcc: исполняемый файл не найден в $ PATH

У меня проблема, из-за которой проект App Engine больше не будет собираться удаленно (через gcloud app deploy)

Это началось совершенно неожиданно, без каких-либо изменений кода на этом этапе. Не уверен, что это актуально, но это проект версии 1.9, развертываемый в среде App Engine Flex.

Я не уверен, как проверить это в той же среде, что и сборка, поскольку ошибка исходит из реестра контейнеров 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

person calcinai    schedule 16.07.2018    source источник
comment
Можете ли вы проверить значение PATH в ~ / .bashrc? Включает ли он / usr / bin?   -  person VonC    schedule 16.07.2018
comment
В моем ~ / .bashrc или удаленном? Я не знаю, как получить доступ к запущенному экземпляру в GCR ...   -  person calcinai    schedule 16.07.2018
comment
Удаленный.   -  person VonC    schedule 16.07.2018
comment
Можно ли получить доступ к удаленной оболочке в GCR? Думаю, это действительно мой вопрос, если бы я мог войти и посмотреть, я мог бы исправить это.   -  person calcinai    schedule 16.07.2018
comment
Может быть, используя облачную оболочку? console.cloud.google.com/getting-started?cloudhell ​​   -  person VonC    schedule 16.07.2018
comment
Я просмотрел документы и не вижу на них конкретных ссылок. Вы знаете, можно ли протестировать gcr.io изображения локально? Даже если мне это удастся и я исправлю PATH, я не вижу способа изменить шаблоны контейнеров Google.   -  person calcinai    schedule 16.07.2018
comment
Не уверен: github.com/GoogleContainerTools/container-structure-test/issues/ может быть?   -  person VonC    schedule 16.07.2018
comment
Вы можете запустить сборку с шагом сборки, который переопределяет точку входа для использования оболочки bash и отображает ваш $ PATH - установите entrypoint на BuildStep на /bin/bash и используйте args [ "-c", "whatever bash command you want to run" ].   -  person David Bendory    schedule 16.07.2018


Ответы (1)


Похоже, вы используете контейнер 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 образа, вы могли бы покопаться в истории, чтобы посмотреть. Но похоже, что в образе go1-builder нет недавних изменений для удаления gcc.

Если вам нужно gcc, вы всегда можете отделить создание приложения от его развертывания. Выполните сборку со своим собственным cloudbuild.yaml через gcloud container builds submit, а затем разверните созданный контейнер с помощью gcloud app deploy --image-url=... Имея полный контроль над сборкой, вы всегда можете на основе образа go-builder установить дополнительные инструменты, такие как gcc, поверх этого, прежде чем использовать Docker для создания окончательного приложения. контейнер.

person David Bendory    schedule 16.07.2018