如何在Docker ENTRYPOINT 中执行bash 表达式?
How to execute bash expression in Docker ENTRYPOINT?
有一个用于 SpringBoot 应用程序的 Docker 文件,其入口点为:
# some lines omitted
ENTRYPOINT java -jar app.jar --spring.config.additional-location=$(ls /config/*.properties | tr '\n' ',')
在容器启动时,主机目录挂载到 /config/
目录:
docker run -p 9999:8080 -v C:/path/to/configuration/:/config my_image_name
它按预期工作,从主机目录捕获所有 *.properties
并将它们应用到应用程序。
为了可读性,我想在 ENTRYPOINT 中使用带有字符串数组的格式,如下所示:
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.config.additional-location=$(ls /config/*.properties | tr '\n' ',')"]
不幸的是,$(...)
中的表达式未在容器启动时求值,应用程序抛出异常,清楚地表明了问题:
[main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalStateException: Unable to load config data from '')'
请帮我找出如何表达 ENTRYPOINT 参数,以便 $()
中的 bash 表达式可以像第一种情况一样进行计算。
要在入口点使用 bash,您需要 运行 bash
,而不是 java
:
ENTRYPOINT ["/bin/bash", "-c", "java -jar app.jar --spring.config.additional-location=$(ls /config/*.properties | tr '\n' ',')"]
入口点的第一个元素是要执行的二进制文件或脚本(即 what)。其余的(包括 CMD
)作为它的参数。 bash -c "some string"
运行 是在字符串中传递的一系列命令,可以在其中使用 bash
表达式。
有一个用于 SpringBoot 应用程序的 Docker 文件,其入口点为:
# some lines omitted
ENTRYPOINT java -jar app.jar --spring.config.additional-location=$(ls /config/*.properties | tr '\n' ',')
在容器启动时,主机目录挂载到 /config/
目录:
docker run -p 9999:8080 -v C:/path/to/configuration/:/config my_image_name
它按预期工作,从主机目录捕获所有 *.properties
并将它们应用到应用程序。
为了可读性,我想在 ENTRYPOINT 中使用带有字符串数组的格式,如下所示:
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.config.additional-location=$(ls /config/*.properties | tr '\n' ',')"]
不幸的是,$(...)
中的表达式未在容器启动时求值,应用程序抛出异常,清楚地表明了问题:
[main] ERROR org.springframework.boot.SpringApplication - Application run failed
java.lang.IllegalStateException: Unable to load config data from '')'
请帮我找出如何表达 ENTRYPOINT 参数,以便 $()
中的 bash 表达式可以像第一种情况一样进行计算。
要在入口点使用 bash,您需要 运行 bash
,而不是 java
:
ENTRYPOINT ["/bin/bash", "-c", "java -jar app.jar --spring.config.additional-location=$(ls /config/*.properties | tr '\n' ',')"]
入口点的第一个元素是要执行的二进制文件或脚本(即 what)。其余的(包括 CMD
)作为它的参数。 bash -c "some string"
运行 是在字符串中传递的一系列命令,可以在其中使用 bash
表达式。