docker - 在 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
。
非常感谢任何如何解决这个问题的建议/反馈。
解决方案
推荐阅读
- javascript - 可排序不会在 Safari 中拖动表格的所有列
- here-api - 如何仅获得可见标记?
- java - getMaxInactiveInterval 返回与 application.properties 中配置的值不同的值
- flutter - 使用 BlockBuilder() 和 TextField() 的 onChanged 属性更新状态失败。[Flutter_Bloc]
- selenium - SocketTimeoutException:使用 TeamCity 的 RestAssured 连接超时
- swift - S 的 (Swift) 扩展
> 其中 S 是泛型结构,P 是类型约束协议 - css - 如何创建这样的面包屑导航?
- http - 如何使这个 HTTP 请求示例工作?
- delphi - 当 TGridPanel 的单元格具有较大的 BorderWidth 时,如何从它获取真正的 ClientRect?
- java - Grails 4.X 可以运行哪些 Java 版本?