【问题标题】:Passing arguments to Docker build while deploying AppEngine flex在部署 AppEngine flex 时将参数传递给 Docker 构建
【发布时间】:2021-06-27 14:38:28
【问题描述】:

我想知道是否可以将参数或环境变量提供给 AppEngine 使用的 Dockerfile(弹性环境)。

我想使用这个命令:

COPY ${STAGE}/keycloak-files/realm-config/* /opt/jboss/keycloak/realm-config/

“STAGE”变量允许选择来源(我有一个“staging”和“production”目录,包含不同的配置)。

我有两个不同的app.yml 文件,每个环境一个,但根据我在线阅读的内容,环境变量在构建时不会暴露给 Dockerfile。

人们建议传递参数来完成任务。但是我们不直接执行 docker build 命令的 appengine 怎么可能呢?

【问题讨论】:

  • 使用预定义的 Docker 镜像可以解决问题吗?我突然想到,也许你可以构建你的 Docker 并使用 gcloud app deploy image-url 标志:cloud.google.com/sdk/gcloud/reference/app/deploy#--image-url
  • 是的,我看到了那个选项...我不知道这是否是最好的解决方案,我正在 Dockerfile 中进行与目标环境相关的操作(参见示例代码)。我暂时将项目复制到“staging”和“production”文件夹中,每个文件夹都有 Dockerfile 和 app.yml。一点也不优雅,但目前看来还可以。使用“image-url”标志而不是这个标志有什么好处?
  • 阅读(旧)相关的 SO 帖子,我看到在本地构建 docker 容器,将其推送到 gcr.io,然后使用 --image-url 标志,可能是一种可能的解决方法。不确定它是否会在您的情况下提供任何优势。帖子:stackoverflow.com/questions/33913525/…
  • 这是一个可能的选择,但是有区别,如果你在本地构建一个镜像,我不确定构建是否发生在你的本地环境中,然后它被推送到 gcr.io,或者它建在那里。使用常规的 Dockerfile + app.yaml 部署会更快,因为您不需要上传任何文件。至少,我认为你没有:-)
  • @DamPlz 我刚刚完成了部署,并阅读了输出,看起来“正常”部署和指定 docker 映像之间没有区别。顺便说一句,为登台和生产环境提供不同的文件夹并不是那么糟糕,因为它们与您的服务器对齐。目前这对我来说是一个很好的解决方案。谢谢!

标签: docker google-app-engine environment-variables dockerfile app-engine-flexible


【解决方案1】:

正如@DamPlz 所说,在部署阶段没有直接的方法将环境变量从 app.yaml 传递到 Dockerfile。以下是我能想到的一些解决方法:

  1. 一种选择是直接在 Dockerfile 中创建变量,如果您想在每次运行时更改它,您可以使用占位符值并让脚本在运行“gcloud app deploy”之前更新变量的值。
  2. 另一方面,您可以使用 Google Cloud Registry 中的构建触发器在 Docker image 中使用 user-defined substitutions 对其进行修改。

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2021-05-15
    • 2020-09-08
    相关资源
    最近更新 更多