Java 如何在docker容器中运行瘦jar

Java 如何在docker容器中运行瘦jar,java,docker,jar,Java,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/ //contai

这是项目的文件夹结构

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 build -t app .
docker run app    
但当我运行docker时:

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 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”“
执行命令。注意,lasts参数全部作为单个参数输入。在数组形式中,它将是

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

您的工件不在
/target/
中,而是在根目录中

请参阅

在Dockerfile中查找错误的最简单方法是在打开shell的情况下运行容器,并在shell中执行您想要的操作。你可以像下面这样做

docker run -it --entrypoint=bash app