Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么jar执行的通配符在docker CMD中不起作用?_Java_Spring_Docker_Spring Boot - Fatal编程技术网

Java 为什么jar执行的通配符在docker CMD中不起作用?

Java 为什么jar执行的通配符在docker CMD中不起作用?,java,spring,docker,spring-boot,Java,Spring,Docker,Spring Boot,我有一个Dockerfile和以下CMD来启动我的spring boot应用程序: FROM java:8-jre # ... CMD ["java", "-jar", "/app/file*.jar"] 当我尝试从创建的图像启动容器时,我得到: Error: Unable to access jarfile /app/file*.jar 但是当我在启动容器时重写CMD并在容器中执行命令时,一切正常: docker run -it <imageId> bash root@<

我有一个
Dockerfile
和以下
CMD
来启动我的spring boot应用程序:

FROM java:8-jre
# ...
CMD ["java", "-jar", "/app/file*.jar"]
当我尝试从创建的图像启动容器时,我得到:

Error: Unable to access jarfile /app/file*.jar
但是当我在启动容器时重写
CMD
并在容器中执行命令时,一切正常:

docker run -it <imageId> bash
root@<containerId>:/app# java -jar /app/file*.jar
<spring boot app starts...>

这种星号扩展是由命令行处理器(shell)完成的,您可以通过直接调用java来绕过它

与在Windows下使用“CMD/C”调用命令的方式大致相同,以获得完整的处理


调用<代码> /bin /s< /COD>。<>代码> CMD java -jar/APP/file *.jar < /> >为我工作< /P>。你也可以考虑部署一个启动脚本来处理所有这些事情以及你的JAR文件。对于maven构建,这通常是通过appassembler maven插件

CMD java-jar/app/file*.jar
完成的。jar大致相同且更直接。使用通配符的原因是什么?@Thorbjørnravandersen jar文件名包含该版本,我不想每次都修改Dockerfile或使用
构建参数
。通配符似乎是避免两者的简单方法。在将jar文件复制到ContainerUp中时,去掉版本号
cmdjava-cp“lib/*”com.mydomain.Main
适合我。“docker ps”显示它运行一个shell:“/bin/sh-c'java-c…”
CMD ["/bin/sh", "-c", "java -jar /app/file*.jar"]