【发布时间】:2018-04-20 23:51:55
【问题描述】:
我尝试在 docker 上运行 java 代码,但是我遇到了一个我无法解决的错误,你能帮帮我吗?!
我有一个非常简单的 java 代码来计算平均值。
import java.util.Scanner;
class Ave
{
public static void main(String args[])
{
int n;
double res=0;
Scanner reader=new Scanner(System.in);
System.out.println("Enter how many numbers to calculate the avrage ");
n=reader.nextInt();
int a[]=new int[n];
System.out.println("Enter "+n+" numbers");
for(int i=0;i<n;i++)
a[i]= (int) reader.nextDouble();
res=Ave.CalAvg(a,n);
System.out.println("The average is " +res/n);
}
static double CalAvg(int a[],int n)
{
double res=0;
for(int i=0;i<n;i++)
res =res+a[i];
return res;
}
}
我的 Dockerfile 是
FROM alpine:latest
ADD Ave.class Ave.class
RUN apk --update add openjdk8-jre
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "Ave"]
我做了什么,我使用 Java 编译器编译了这个文件。
$ javac Ave.java
我使用下面的命令从这个 Dockerfile 构建一个图像
$ docker build --tag "docker-hello-world:latest" .
然后,我尝试通过执行以下命令来运行 Docker 映像以查看结果。
$ docker run docker-hello-world:latest
最后,我得到了这个我无法弄清楚的错误或异常
代码在服务器和本地机器上运行,但在docker上不起作用
Enter how many numbers to calculate the avrage
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Ave.main(Ave.java:17)
【问题讨论】:
-
试试
docker run -it docker-hello-world。 -
@SiKing 它也不起作用。 [在线程“main”java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory at Ave.main(Ave.java:21) 中输入多少个数字来计算平均 3 异常原因:java .lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory ... 1 更多原因:java.lang.ClassNotFoundException: java.lang.invoke.StringConcatFactory at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java .lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher... ]
-
@YazeedAlqahhas 我尝试过使用
docker run -it docker-hello-world:latest,它对我有用,我使用了您提供的确切java源代码和确切的Dockerfile。检查您的java类源代码,该错误看起来像是您向其中添加了更多代码,并且与您在此处发布的不同。
标签: java unix docker dockerfile