在docker镜像中运行jar文件

Sve*_*lov 38 docker dockerfile

我用java创建了一个docker镜像,并在图像中使用coppying jar文件.我的Dockerfile是:

FROM anapsix/alpine-java
MAINTAINER myNAME 
COPY testprj-1.0-SNAPSHOT.jar /home/testprj-1.0-SNAPSHOT.jar
RUN java -jar /home/testprj-1.0-SNAPSHOT.j
Run Code Online (Sandbox Code Playgroud)

执行以下命令后

docker build -t imageName.
Run Code Online (Sandbox Code Playgroud)

在控制台中,我看到应用程序和everthing的输出很好.但是,当我停止图像时,我不知道如何再次运行图像?执行以下命令时:

docker run -i -t imageName java -jar /home/testprj-1.0-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

应用程序再次运行,但在我的Dockerfile中我已经写了这个命令.如何在没有此命令的情况下运行映像,应用程序会自动运行

bla*_*ops 68

图像和容器之间存在差异.

  • 图像将建立在ONCE上
  • 您可以从Images启动容器

在你的情况下:

改变你的形象:

FROM anapsix/alpine-java
MAINTAINER myNAME 
COPY testprj-1.0-SNAPSHOT.jar /home/testprj-1.0-SNAPSHOT.jar
CMD ["java","-jar","/home/testprj-1.0-SNAPSHOT.jar"]
Run Code Online (Sandbox Code Playgroud)

建立你的形象:

docker build -t imageName .
Run Code Online (Sandbox Code Playgroud)

现在调用容器内的程序:

docker run --name myProgram imageName
Run Code Online (Sandbox Code Playgroud)

现在重启容器重新启动程序:

docker restart myProgram
Run Code Online (Sandbox Code Playgroud)

你的程序改了吗?重建图像!:

docker rmi imageName
docker build -t imageName .
Run Code Online (Sandbox Code Playgroud)


Cra*_*yro 6

这可能不是你问的那样,但如果你需要运行一个 JAR(而不是只是一个更大的自定义容器的一部分),我喜欢这种将卷/文件夹映射到 JAR 并使用它运行的方法标准上游图像:

docker run --rm -it -v /home/me/folderHoldingJar:/home:Z java:latest /bin/bash -c '/usr/bin/java -jar /home/theJarFile.jar'
Run Code Online (Sandbox Code Playgroud)

如果 JAR 需要显示 GUI,您甚至可以添加一些额外的参数