web-dev-qa-db-de.com

Führen Sie die JAR-Datei im Docker-Image aus

Ich habe ein Docker-Image mit Java erstellt und kopiere die JAR-Datei in das Image. Mein Dockerfile ist:

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

Nach dem Ausführen des folgenden Befehls:

docker build -t imageName.

In der Konsole sehe ich die Ausgabe der Anwendung und alles ist in Ordnung. Aber wenn ich das Image stoppe, weiß ich nicht, wie ich das Image erneut ausführen soll? Wenn ich den folgenden Befehl ausführe:

docker run -i -t imageName Java -jar /home/testprj-1.0-SNAPSHOT.jar

Die Anwendung wird erneut ausgeführt, aber in meinem Dockerfile habe ich diesen Befehl bereits geschrieben. Wie kann ich das Image ohne diesen Befehl ausführen und die Anwendung automatisch ausführen lassen?

35

Es gibt einen Unterschied zwischen Bildern und Containern.

  • Die Bilder werden EINMAL erstellt
  • Sie können Container von Images aus starten

In Ihrem Fall:

Ändere dein Bild:

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"]

Bauen Sie Ihr Image auf:

docker build -t imageName .

Rufen Sie nun Ihr Programm in einem Container auf:

docker run --name myProgram imageName

Starten Sie nun Ihr Programm neu, indem Sie den Container neu starten:

docker restart myProgram

Dein Programm hat sich geändert? Bild neu erstellen !:

docker rmi imageName
docker build -t imageName .
65
blacklabelops

Dies ist möglicherweise nicht ganz das, wonach Sie gefragt haben, aber wenn Sie nur eine JAR ausführen müssen (anstatt dass dies nur ein Teil eines größeren benutzerdefinierten Containers ist) Mir gefällt dieser Ansatz, ein Volume/einen Ordner der JAR zuzuordnen und mit einem Standard-Upstream-Image auszuführen:

docker run --rm -it -v /home/me/folderHoldingJar:/home:Z Java:latest /bin/bash -c '/usr/bin/Java -jar /home/theJarFile.jar'

Es gibt sogar einige zusätzliche Argumente Sie können hinzufügen, wenn die JAR eine GUI anzeigen muss.

0
CrazyPyro