如何正确读取dockerfile中的环境变量

时间:2020-08-09 06:40:22

标签: java docker docker-compose dockerfile

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

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

这是docker run命令,我在运行时传递值。我在这里做错什么了吗?值始终被识别为空。我也曾尝试删除ENV dbconfig "",但无济于事

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

2 个答案:

答案 0 :(得分:1)

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

exec表单被解析为JSON数组,这意味着您必须使用 单词周围的双引号(“)而不是单引号(')。 因此,您使用exec表单。

But

与shell表单不同,exec表单不会调用命令shell。 这意味着不会进行常规的外壳处理。例如, ENTRYPOINT [“ echo”,“ $ HOME”]不会在 $ HOME

因此,建议使用shell形式以允许env变量替换:

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

或以exec形式调用shell:

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

答案 1 :(得分:-1)

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

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

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

docker run -i -t argument1 argument2