V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zealinux
V2EX  ›  Kubernetes

Dockerfile 如何传递环境变量文件并执行?

  •  
  •   zealinux · 2020-07-12 12:59:47 +08:00 · 2979 次点击
    这是一个创建于 507 天前的主题,其中的信息可能已经有所发展或是发生改变。

    启动容器时 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 操作)

    8 条回复    2020-07-13 10:18:23 +08:00
    Jirajine
        1
    Jirajine   2020-07-12 13:08:21 +08:00 via Android
    你 sh 执行的脚步里面定义的变量外面是看不到的。
    直接饮用 env 文件或者把环境变量设置和程序启动命令写到一个 launcher 脚本里面,然后入口直接启动这个脚本。
    yangbonis
        2
    yangbonis   2020-07-12 14:29:14 +08:00 via iPhone
    你看下 oci 的 spec 文件里 entrypoint 或者 cmd 和 env 的解析顺序,如果 env 后解析,那你 entrypoint 的语句只能做成镜像里脚本,然后 sh 那个脚本。
    yangbonis
        3
    yangbonis   2020-07-12 14:35:03 +08:00 via iPhone
    可能加上转义就能用了
    yangbonis
        4
    yangbonis   2020-07-12 14:51:53 +08:00 via iPhone
    还有你这 souce 的 java 子进程看不到
    leimao
        5
    leimao   2020-07-13 08:48:04 +08:00 via iPhone
    Dockerfile 里需要有相应声明吧?
    https://leimao.github.io/blog/Docker-Building-Arguments/
    leimao
        6
    leimao   2020-07-13 08:59:12 +08:00
    不好意思,把环境变量看成 argument 了。
    leimao
        7
    leimao   2020-07-13 09:02:01 +08:00
    不过你这个,instead of using env, 用 argument 就能看的到变量了。
    luhuisicnu
        8
    luhuisicnu   2020-07-13 10:18:23 +08:00
    java 启动参数里面可以加环境变量, -D
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2625 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:16 · PVG 20:16 · LAX 04:16 · JFK 07:16
    ♥ Do have faith in what you're doing.