启动容器时 configMap 文件 config-env.sh,挂载到 /u/app/env
AA=123
BB=456
...大几十条...
我在 Dockerfile 中写了
ENTRYPOINT ["sh", "-c", "${WAIT_FOR} java -jar a.jar"]
ENTRYPOINT 改成了 CMD 也不行
我 K8s 传递的时候使用:
env:
# NOT OK
- name: WAIT_FOR
value: "source /u/app/env/config-env.sh && "
容器应该是启动不成功,不停重启 CrashLoopBackOff
由于平台限制,尽量使用configMap挂载文件的方式。 如果一条一条设置 env,也不好。 因为这个需要甲方人手动一个一个添加进去。 (他们不用原始的 kubectl 的 yaml 文件,而是是通过某家的 k8s 平台管理 web 操作)
1
Jirajine 2020-07-12 13:08:21 +08:00 via Android
你 sh 执行的脚步里面定义的变量外面是看不到的。
直接饮用 env 文件或者把环境变量设置和程序启动命令写到一个 launcher 脚本里面,然后入口直接启动这个脚本。 |
2
yangbonis 2020-07-12 14:29:14 +08:00 via iPhone
你看下 oci 的 spec 文件里 entrypoint 或者 cmd 和 env 的解析顺序,如果 env 后解析,那你 entrypoint 的语句只能做成镜像里脚本,然后 sh 那个脚本。
|
3
yangbonis 2020-07-12 14:35:03 +08:00 via iPhone
可能加上转义就能用了
|
4
yangbonis 2020-07-12 14:51:53 +08:00 via iPhone
还有你这 souce 的 java 子进程看不到
|
5
leimao 2020-07-13 08:48:04 +08:00 via iPhone
Dockerfile 里需要有相应声明吧?
https://leimao.github.io/blog/Docker-Building-Arguments/ |
6
leimao 2020-07-13 08:59:12 +08:00
不好意思,把环境变量看成 argument 了。
|
7
leimao 2020-07-13 09:02:01 +08:00
不过你这个,instead of using env, 用 argument 就能看的到变量了。
|
8
luhuisicnu 2020-07-13 10:18:23 +08:00
java 启动参数里面可以加环境变量, -D
|