首页 > 解决方案 > 在 ENTRYPOINT 开始之前将 Env 变量从 initContainer 注入主容器

问题描述

这已以其他形式提出,但情况如下:

我想在执行 ENTRYPOINT 之前将一个环境变量从(init)容器传递到另一个(主)容器(这意味着我不想覆盖主容器的 ENTRYPOINT)

为简单起见,示例 pod 清单如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  containers:
    - name: maincontainer
      image: nginx
      ports:
      - containerPort: 80
      securityContext:
        runAsUser: 0
      volumeMounts:
      - name: my-volume
        mountPath: /var2
  initContainers:
    - name: initcontainer
      securityContext:
        runAsUser: 0
      image: curlimages/curl
      command: ["bin/sh"]
      # pass the env variable to a (mounted) file ... this needs to be `source`d in the main container
      args: ["-c", "echo NEWENV=var > /var/log/mynewlog.env ; sleep 100"]
      volumeMounts:
      - name: my-volume
        mountPath: /var/log
  volumes:
  - name: my-volume
    emptyDir: {}

主容器的 ENTRYPOINT 本质上读取 env 变量,并且由于它已被多个服务使用,我不想更改 Dockerfile/如何ENTRYPOINT实现。

如果有一种方法可以确保我可以在 maincontianer 启动之后(并且在它的 ENTRYPOINT 之前)运行脚本,那将是完美的......但不幸的是 PostStart钩子并不能保证这一点。

另一个潜在的解决方案(我需要进一步研究)是以某种方式从 initContainer 中创建一个配置映射并注入 data/env 变量,该变量将从主容器的字段中读取/引用env

非常感谢任何如何解决这个问题的建议/反馈。

标签: dockerkubernetesenvironment-variables

解决方案


推荐阅读