启动Docker容器时提示Unable to access jarfile的原因咨询
问题原因分析
核心问题出在WORKDIR /tmp指令改变了容器的工作目录,导致Java命令找不到jar文件:
无法正常运行的Dockerfile执行流程拆解
COPY target/vol_demo.jar vol_demo.jar:此时容器默认工作目录是根目录/(openjdk镜像的初始工作目录),所以jar包被复制到了/vol_demo.jar位置。WORKDIR /tmp:这条指令将容器启动后的默认工作目录切换为/tmp。ENTRYPOINT ["java", "-jar", "vol_demo.jar"]:执行Java命令时,会在当前工作目录(即/tmp)下查找vol_demo.jar,但jar包实际在根目录/下,自然找不到,因此抛出「Unable to access jarfile」错误。
可正常运行的Dockerfile为什么没问题
该版本没有设置WORKDIR,容器启动后默认工作目录还是根目录/,Java命令能直接找到根目录下的vol_demo.jar,所以可以正常启动。
修复方案(二选一)
- 方案1:调整COPY指令到WORKDIR之后,让jar包直接复制到/tmp目录
FROM openjdk ENV filePath=/tmp/test.txt EXPOSE 8080 RUN mkdir -p /tmp WORKDIR /tmp RUN touch /tmp/test.txt COPY target/vol_demo.jar vol_demo.jar ENTRYPOINT ["java", "-jar", "vol_demo.jar"]
- 方案2:在ENTRYPOINT中指定jar包的绝对路径
FROM openjdk COPY target/vol_demo.jar vol_demo.jar ENV filePath=/tmp/test.txt EXPOSE 8080 RUN mkdir -p /tmp WORKDIR /tmp RUN touch /tmp/test.txt ENTRYPOINT ["java", "-jar", "/vol_demo.jar"]
内容的提问来源于stack exchange,提问作者kverma28
相关产品推荐
相关产品推荐

