【问题标题】:How to read enviroment variables in dockerfile correctly如何正确读取 dockerfile 中的环境变量
【发布时间】:2020-08-09 06:40:22
【问题描述】:

我有一个 Dockerfile,我试图在其中读取运行时参数。这是我的 dockerfile

FROM clojure:openjdk-8-lein-slim-buster
ENV dbconfig ""
ENTRYPOINT ["java","-Ddbconfig=${dbconfig}", "-jar", "abc.jar", "server"]
EXPOSE 8080

这是我在运行时传递值的 docker run 命令。我在这里做错了吗?值始终被识别为 null。我也试过删除ENV dbconfig "",但没有任何效果

docker run --rm -e dbconfig='{"somekey" "value"}' xyz/abc

【问题讨论】:

    标签: java docker docker-compose dockerfile


    【解决方案1】:

    您有两种方法来定义入口点:exec vs shell

    exec 形式被解析为 JSON 数组,这意味着你必须使用 双引号(“)围绕单词而不是单引号(')。 所以你使用exec 表单。

    But

    与 shell 形式不同,exec 形式不调用命令 shell。 这意味着不会发生正常的外壳处理。例如, ENTRYPOINT [ "echo", "$HOME" ] 不会在 $首页

    所以支持 shell 形式以允许环境变量替换:

    ENTRYPOINT java -Ddbconfig=${dbconfig} -jar abc.jar server
    

    或以 exec 形式调用 shell:

    ENTRYPOINT [ "sh", "-c", "java","-Ddbconfig=${dbconfig}", "-jar", "abc.jar", "server" ]
    

    【讨论】:

      【解决方案2】:

      尝试使用 CMD 传递运行时参数,示例如下

      ENTRYPOINT ["/bin/bash"]
      CMD ["/sample.sh", "argument1","argument2"]
      

      然后在运行时传递参数将是:-

      docker run -i -t argument1 argument2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 2020-07-12
        • 2021-12-20
        • 2013-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多