我正在尝试建立一个非常简单的Docker容器,它将执行一个Jar文件。我想要一个可以运行简单Jar的图像。我不需要其他特别的东西。
到目前为止,我的docker-compose.yml看起来像这样,但是无法正确启动:
version: "3.3"
services:
myapp:
image: openjdk:8
container_name: "myapp"
restart: always
ports:
- 8091:8091
volumes:
- "./meanwhile-in-hell.jar:/app.jar"
command: ['java', '-jar', '/app.jar']
STATUS
Restarting (1) 2 seconds ago
使用command: ['java', '-jar', '/app.jar']
选项,我在Docker日志中看到了这一点:
Error: Invalid or corrupt jarfile /app.jar
如果更改为使用entrypoint: [ "sh", "-c", "java -jar /app.jar" ]
,则会看到相同的错误。
Jar文件绝对正确,没有损坏。我已经在另一个正在运行的tomcat:8-alpine
容器上手动运行了它,并且它成功启动。
您可以检查此issue,您需要在入口点设置标记,在pom中设置路径。
对我来说,当我遇到问题时,我所做的只是放JAR_FILEpom中的参数不带正斜杠“ /”,就可以了。
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
以及与Dockerfile一起的入口点将是]
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]