docker - 如何使用 `gcloud config` 构建基于 `gcr.io/google.com/cloudsdktool/cloud-sdk` 的镜像
问题描述
我正在尝试构建一个基于 的映像gcr.io/google.com/cloudsdktool/cloud-sdk:alpine
,其中包含一些我在构建时已经知道的配置。在我的本地系统上进行了一些测试后gcloud config set
,我将这些命令转换为我的 Dockerfile。尽管命令序列在我的计算机上产生了预期的最终RUN
gcloud 配置,但我在 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
解决方案
gcloud
配置被持久化/root/.config/gcloud/configurations/config_default
BUT /root/.config
and /root/.kube
are VOLUME
s 并且不能改变:
VOLUME ["/root/.config", "/root/.kube"]
“如果任何构建步骤在声明后更改卷内的数据,这些更改将被丢弃。”
请参阅:https ://docs.docker.com/engine/reference/builder/#volume
推荐阅读
- lastpass - LastPass - 这究竟是做什么的“尊重自动完成=关闭:允许网站禁用自动填充”
- java - 如何使用 Java 8 Stream 或集合框架计算列表中多个元素的出现次数
- kubernetes - 使用 ServiceMesh 进行物理安全配置
- bash - 从 1 个文件中剪切文件并从另一个文件中剪切文件 grep -v
- vb.net - 消失的命令提示符 VB 脚本
- docker - Docker 桥接网络 curl 请求
- datetime - 如何用 go 转换日期时间?
- javascript - Jquery sortable + draggable无法获得正确的事件目标ID
- pixi.js - 告诉 PixiJS WebGL 状态已被外部修改
- c# - 域用户登录时如何以提升的权限启动exe