如何在docker集装箱中运行一个薄的jar子

这是该项目的文件夹结构

pom.xml Dockerfile src/ main/java/com/example/*.java test/java/com/example/*.java etc/ config.properties args.params target/ app.jar app.tar.gz libs/ //contains dependent jars classes/ //contains compiled classes 

应用程序通常使用以下命令执行:

 java -Djava.net.preferIPv4Stack=true -Dconfig.dir=./etc -Dlogback.configurationFile=./etc/log.xml -jar app.jar 

我已经写了这个dockerfile在docker中运行jar:

 FROM java:8 EXPOSE 6078 COPY target/ / ADD target/app.tar.gz / ENTRYPOINT ["java", "-cp", "target/app.jar:target/app/libs/*:", "com.example.MainClass"] CMD ["`cat etc/args.params`","-Dlogback.configurationFile=./etc/log/xml"] 

但是当我运行docker时:

 docker build -t app . docker run app 

我收到以下错误:

 Error: Could not find or load main class com.example.MainClass 

我错过了什么?

评估不适用于Docker命令。 这条路

 FROM ubuntu:16.04 CMD ["echo","My name is Tarun", "`date`"] 

这将会结束

 My name is Tarun `date` 

但是,如果我改变我的Dockerfile

 FROM ubuntu:16.04 CMD /bin/bash -c "echo My name is Tarun `date`" 

然后你会得到正确的输出。 所以你需要使用/bin/bash -c "<full command>"来执行你的命令。 请注意,最后一个参数全部作为单个参数进入。 在数组中的forms将是

 CMD ["/bin/bash","-c", "echo My name is Tarun `date`"] 

你的工件不在/target/但在根目录。

请参考dockerfile文件 。

在Dockerfile中find错误的最简单的方法是运行容器,只需打开shell,然后在shell中做你想要的。 你可以像下面这样做。

 docker run -it --entrypoint=bash app