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

标签 java spring docker spring-boot

我有一个带有以下 CMDDockerfile 来启动我的 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...>

是否可以在使用 docker CMD 的 java -jar 命令中使用通配符? 请不要告诉我不要使用通配符。我想使用它的原因;-)

更新 根据答案,我能够修复它:

CMD ["/bin/sh", "-c", "java -jar /app/file*.jar"]

最佳答案

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

与在 Windows 下使用“CMD/C”调用命令的方式非常相似,以获得完整的处理。

改为调用 /bin/sh

关于java - 为什么 jar 执行的通配符在 docker CMD 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41428013/

相关文章:

docker - 无法连接到在远程Ubuntu服务器上运行的elasticsearch或kibana

ruby - "cannot find -lucontext"在新推送的 docker 镜像 ruby​​ :2. 7.4-alpine3.13 上安装一些 ruby​​gems 时

java - 实用程序库的日志记录标准

java - 在 R 上使用 Java 16 运行 H2O

java - 我什么时候应该关闭从 Tapestry 中的 HibernateSessionManager 获取的 session ?

java - 如何使用FEIGN客户端发送SOAP对象?

spring - 从 Spring Boot Controller 返回 JAXB 生成的元素

java - 使用不同的根对象类型调用相同的 Spring EL 表达式失败

docker - 使用nginx作为反向代理和负载均衡器,是否有一种方法可以在使用docker-compose时自动检测新的容器实例?

java - 将 FutureTask 转换为 ScheduledFuture