尝试使用Docker运行jar文件时出现“无法访问jarfile”的错误。

3

当我尝试运行我的jar文件时,出现了“Error: Unable to access jarfile jar-runner.jar”的错误。

Dockerfile:

FROM anapsix/alpine-java
MAINTAINER bramhaag
CMD ["java", "-jar", "jar-runner.jar", "some param", "some param"]

这个jar文件位于/home/selfbot/,我是在Portainer中运行它的。 这是我Portainer容器的样子: Portainer[1]

我该如何让它工作?

3个回答

1
使用 CMD [ ] "exec" 格式,Docker 将尝试查看参数并给出其有关其有用性的意见。"无法访问 jarfile" 是 Docker 的消息,这意味着 Docker 对 jarfile 有一些(未指定的)问题。例如,当 jarfile 的名称包含 ENV 变量时,我遇到过这种情况。显然,Docker 无法处理它。
还有 CMD "shell" 格式,CMD java -jar jar-runner.jar "some param" "some param"。这被称为 shell 格式,因为 Docker 将参数交给 /bin/sh -c 处理。因此,它不会试图猜测参数的含义。而 sh 本身也不会聪明。而 java 完全可以使用 jar-runner.jar
请注意,如果 jar-runner.jar 中有拼写错误或者放错位置,那么 Docker 的消息可能是正确的。当 Docker 猜错时,shell 解决方法很有用。

0

看起来您已经挂载了卷,因此假设您正确地认为JAR文件通过该卷在容器中可用,您可能只需要指定路径以便Java可以找到它。

CMD ["java", "-jar", "/home/selfbot/jar-runner.jar", "some param", "some param"]

您可以通过运行不同的命令来检查文件是否真的可用,以仅显示给定目录的内容。将命令(在Portainer中)更改为类似以下内容:

ls -la /home/selfbot

然后您可以验证 jar 文件是否实际上在您认为的位置,以及是否可读等。此命令将立即退出,但其输出将在容器日志中可用。


@bramhaag 请查看我的更新答案,了解如何检查您的jar文件是否真的存在。 - Dan Lowe

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接