【问题标题】:How to embed environment variables into the images with buildpack如何使用 buildpack 将环境变量嵌入到图像中
【发布时间】:2021-08-09 09:45:47
【问题描述】:

我尝试将环境变量嵌入到图像中,如下所示:

pack build samples/java --path java/jar --env BP_JVM_VERSION=8 --env BPE_TEST_VAR=test

然后我运行图像,并附加它,运行

echo $TEST_VAR

什么都不显示

如何获取环境变量?

【问题讨论】:

标签: docker buildpack


【解决方案1】:

目前,仅使用 pack cli 是不可能的。当您将-e/--env 标志设置为pack build 时,您将指示pack 在构建时设置该环境变量。它不会是图像的一部分,也不会在启动时设置。

您可以在启动时使用运行映像的工具(即 Docker、Kubernetes 等)设置环境变量。你如何做到这一点取决于工具,例如使用 Docker,它只是 docker run -e name=val ...

如果您想将环境变量烘焙到映像本身中,则需要一个 buildpack 来为您执行此操作(至少目前是这样)。正如 cmets 中提到的,Paketo 构建包集提供了 a buildpack through which you can do thisinstructions for using it can be found here

例子:

pack build samples/java --path java/jar --env BP_JVM_VERSION=8 --env BPE_OVERRIDE_TEST_VAR=test

这将覆盖TEST_VAR 并将其设置为test。还有其他选项,例如 append、prepend 和 default,而不是 override,这些在文档中有更多解释。

如文档中所述:

请勿使用环境变量 buildpack 嵌入敏感凭据或信息。此信息会添加到您的构建工具生成的映像中,因此任何有权访问该映像的人都可以看到您使用此构建包嵌入的内容。

【讨论】:

  • 当我构建它时确实显示了`[creator] Writing env.launch/TEST_VAR.override`,但是`echo $TEST_VAR`仍然不起作用
  • 您如何使用echo 进行验证?如果您希望启动器自动设置环境变量,则需要调用它。请参阅此处的第一个示例 -> buildpacks.io/docs/app-developer-guide/run-an-app/…
  • 让我说清楚。正如您在上面所说的If you want to bake the environment variable into the image itself, you need a buildpack to do that for you (at least at the moment). As was mentioned in the comments, the Paketo set of buildpacks provide a buildpack through which you can do this and instructions for using it can be found here.,我确实使用了paketo-buildpacks/environment-variables,因为我的默认构建器是paketobuildpacks/builder:base,然后我在pack build 时将-env 设置为BPE_*。但是当我运行图像并运行 echo $var 时,仍然没有打印我的环境变量。
  • 你在运行docker run -it my-cool-image echo "$var"吗?或者你正在运行docker run --entrypoint launcher -it my-cool-image echo "$var"?包含启动器至关重要。启动器知道如何获取所有环境变量并确保在您的命令运行之前正确设置它们。如果您跳过启动器,则您设置的任何环境变量都将不可用。听起来这就是正在发生的事情。
猜你喜欢
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 2021-07-20
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多