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"]