如何在Docker容器内执行java -cp命令?运行遇文件不存在错误
问题解决:Docker运行时出现"no such file or directory: unknown"错误
错误原因
你的Dockerfile中ENTRYPOINT采用了数组格式,但把完整的Java命令作为单个字符串元素传入。Docker会将这个完整字符串当作可执行文件去查找,自然找不到对应文件,因此抛出该错误。
修复方案
将ENTRYPOINT的每个命令、选项、参数拆分为数组的独立元素,修改后的Dockerfile如下:
FROM openjdk:8-jre-slim VOLUME /tmp ARG JAR_VERSION EXPOSE 8080 WORKDIR /tmp COPY xyz/xyz.jar /tmp/xyz.jar COPY xyz/xyz.csv /tmp/xyz.csv ENTRYPOINT ["java", "-cp", "/tmp/xyz.jar", "-Dloader.main=com.x.y.MainClass", "--spring.profiles.active=dev", "--runId=test", "--tasksFile=/tmp/xyz.csv"]
额外说明
- 使用数组形式的
ENTRYPOINT(exec格式)时,每个命令组件都必须是数组的单独元素,Docker会直接执行指定命令并传递参数。 - 若使用字符串形式的shell格式,Docker会通过
/bin/sh -c包裹执行,但exec格式更适合需要传递信号(比如容器停止时的SIGTERM)的场景。
内容的提问来源于stack exchange,提问作者Anurag Srivastava
相关产品推荐
相关产品推荐

