首页 > 解决方案 > 如何使用 `gcloud config` 构建基于 `gcr.io/google.com/cloudsdktool/cloud-sdk` 的镜像

问题描述

我正在尝试构建一个基于 的映像gcr.io/google.com/cloudsdktool/cloud-sdk:alpine,其中包含一些我在构建时已经知道的配置。在我的本地系统上进行了一些测试后gcloud config set,我将这些命令转换为我的 Dockerfile。尽管命令序列在我的计算机上产生了预期的最终RUNgcloud 配置,但我在 docker 映像上发现的行为有所不同,并且在命令之后没有持续变化。

我没想到这种行为。这应该怎么解释?

在故障排除期间,我使用以下 Dockerfile 来评估问题:

FROM gcr.io/google.com/cloudsdktool/cloud-sdk:alpine AS runner
  RUN ["gcloud", "config", "list"]
  RUN ["gcloud", "config", "set", "compute/region", "europe-west1"]
  RUN ["gcloud", "config", "list"]
  ENTRYPOINT [ "bash" ]

可以看到步骤 2/5 和步骤 4/5 产生相同的输出,即使步骤 3/4 应该更改compute/region.

$ docker build --no-cache .
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM gcr.io/google.com/cloudsdktool/cloud-sdk:alpine AS runner
 ---> e3ce7ea1a190
Step 2/5 : RUN ["gcloud", "config", "list"]
 ---> Running in b8fb806b04aa
[component_manager]
disable_update_check = true
[core]
disable_usage_reporting = true
[metrics]
environment = github_docker_image

Your active configuration is: [default]
Removing intermediate container b8fb806b04aa
 ---> bc8321e71e60
Step 3/5 : RUN ["gcloud", "config", "set", "compute/region", "europe-west1"]
 ---> Running in cfbcb80b1a31
Updated property [compute/region].
Removing intermediate container cfbcb80b1a31
 ---> db76ee7c5e60
Step 4/5 : RUN ["gcloud", "config", "list"]
 ---> Running in d90c64fcf0b0
[component_manager]
disable_update_check = true
[core]
disable_usage_reporting = true
[metrics]
environment = github_docker_image

Your active configuration is: [default]
Removing intermediate container d90c64fcf0b0
 ---> a593aa61055e
Step 5/5 : ENTRYPOINT [ "bash" ]
 ---> Running in acb4d360754c
Removing intermediate container acb4d360754c
 ---> edab55257026
Successfully built edab55257026

云建设者 https://github.com/GoogleCloudPlatform/cloud-builders/tree/master/gcloud

标签: dockergoogle-cloud-platformdockerfilegcloudgoogle-cloud-build

解决方案


gcloud配置被持久化/root/.config/gcloud/configurations/config_default

BUT /root/.configand /root/.kubeare VOLUMEs 并且不能改变:

VOLUME ["/root/.config", "/root/.kube"]

https://github.com/GoogleCloudPlatform/cloud-sdk-docker/blob/8764ec3c23860b35e9a7883c74ca2b4a6b45d866/Dockerfile#L42

“如果任何构建步骤在声明后更改卷内的数据,这些更改将被丢弃。”

请参阅:https ://docs.docker.com/engine/reference/builder/#volume


推荐阅读