Docker运行java应用程序

我有一个简单的hello world java应用程序,我想构build运行它的Docker镜像。

Dockerfile:

FROM java:8 ADD dist/JavaApplication1.jar /JavaApplication1.jar RUN chmod +x /JavaApplication1.jar CMD ["/usr/bin/java -jar /JavaApplication1.jar"] # or CMD ["java -jar /JavaApplication1.jar"] 

我build立它:

 docker build -t myapp . 

并运行它:

 docker run -tdi myapp 

但它抛出:

 Error response from daemon: Cannot start container 105f043e565e465639e15d78e92dc74e64562faa510fae5d6ff48da3a58c0125: [8] System error: exec: "java -jar /JavaApplication1.jar": stat java -jar /JavaApplication1.jar: no such file or directory 

当运行它时:

 docker run -ti myapp bash 

并做ls,文件在那里,当我运行“/ usr / bin / java -jar /JavaApplication1.jar”,那么一切正常。 问题在哪里?

我的docker版本:1.9.0。

在docker 1.9.1上,你的任何一种方法都适用于我:

 exec: "/usr/bin/java -jar /JavaApplication1.jar": stat /usr/bin/java -jar /JavaApplication1.jar: no such file or directory 

这与CMD的文档是一致的

基本上你可以使用:

 CMD ["executable","param1","param2"] CMD ["param1","param2"] CMD command param1 param2 

这将意味着第一个参数是一个二进制不是一个整数cmd,这就是你错误的原因。 如果你像上面的例子那样分解了cmd,它就可以正常工作。

 FROM java:8 ADD dist/JavaApplication1.jar /JavaApplication1.jar CMD ["java", "-jar", "/JavaApplication1.jar"] 

奖金: chmod +x是不需要的