如何在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