我有一个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
答案 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