【问题标题】:Using an environment variable in a file docker container在文件 docker 容器中使用环境变量
【发布时间】:2020-04-06 21:39:51
【问题描述】:

我正在一个 docker 容器中设置一个环境变量,我在运行时收到它的值。

  env:
    - name: POD_INFO
      value: {{ Values.resolved_when_the_container_starts }}

我想在 XML 文件中使用这个值。有什么办法可以做到吗?

类似

<property>
   <name>pod.info</name>
   <value>this place should pick up the value from that environment variable</value>
</property>

【问题讨论】:

  • 这实际上是一个 Kubernetes 问题吗?舵? XML 文件来自哪里? (您可以使用 Helm 模板在 Kubernetes ConfigMap 对象中创建它吗?)
  • 这好像是 helm,所以 XML 在容器内?
  • 我想提供尽可能多的上下文。因此,我放入了 kubernetes 标签。 @大卫迷宫。 CM 在这里不是一个选项,因为我在容器启动时收到 POD_INFO。将其视为 POD_HOST(这是 kubernetes 标准 POD_HOST )和一些创建命名空间和服务的代码之间的连接字符串。所以 POD_INFO 将是 POD_HOST+命名空间+服务名称。而命名空间是随机生成的名称。因此,我无法将其硬编码到 configmap 中。
  • @paltaa ,是的,它是一个 helm 模板。所以 XML 在容器内。

标签: bash docker kubernetes kubernetes-statefulset


【解决方案1】:

您可以使用 envsubst 并在您的 entrypoint.sh 脚本中调用它。您必须先定义变量,然后用envsubst 替换它们。

kminehart 很好地解释了envsubst 在 github cases 之一中的工作原理。

# mytemplate.tmpl  
apiVersion: extensions/v1beta1  
kind: Deployment  
# ...  
architecture: ${GOOS}  
GOOS=amd64 envsubst < mytemplate.tmpl > mydeployment.yaml  
# mydeployment.yaml  
apiVersion: extensions/v1beta1  
kind: Deployment  
# ...  
architecture: amd64  

另一种环境替换方式是sedHere 是一篇很好的文章,展示了它是如何工作的。

sed -i -g "s/[target_expression]/[replace_expression/g" <file> 

【讨论】:

    【解决方案2】:

    Kubernetes 和 Helm 都没有提供模板化 ConfigMap 或任何其他文件的方法。您可能正在寻找的是init container,它在您的容器之前开始,并且可以执行您想要的任何自定义脚本。然后,您可以使用您的环境变量修改配置文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2016-11-29
      • 1970-01-01
      • 2019-06-26
      • 2015-05-29
      相关资源
      最近更新 更多