web-dev-qa-db-fra.com

Exécuter le fichier jar dans l'image du menu fixe

J'ai créé une image Docker avec Java et je copie le fichier jar dans l'image. Mon Dockerfile est:

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

Après avoir exécuté la commande suivante:

docker build -t imageName.

Dans la console, je vois le résultat de l'application et tout va bien. Mais quand j’arrête l’image, je ne sais pas comment la relancer? Quand j'exécute la commande suivante:

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

L'application s'exécute à nouveau, mais j'ai déjà écrit cette commande dans mon fichier Dockerfile. Comment puis-je exécuter l'image sans cette commande et que l'application s'exécute automatiquement?

35
Svetoslav Angelov

Il y a une différence entre les images et les conteneurs.

  • Les images seront construites UNE FOIS
  • Vous pouvez démarrer des conteneurs à partir d'images

Dans ton cas:

Changez votre image:

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

Construisez votre image:

docker build -t imageName .

Maintenant, invoquez votre programme dans un conteneur:

docker run --name myProgram imageName

Maintenant, redémarrez votre programme en redémarrant le conteneur:

docker restart myProgram

Votre programme a changé? Reconstruisez l'image !:

docker rmi imageName
docker build -t imageName .
65
blacklabelops

Ce n'est peut-être pas tout à fait ce que vous avez demandé, mais si vous vous devez simplement exécuter un fichier JAR (plutôt que ce n'est qu'une partie d'un conteneur personnalisé plus grand) J'aime cette approche consistant à mapper un volume/dossier sur le fichier JAR et à l'exécuter à l'aide d'une image en amont standard:

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

Il y a même quelques arguments supplémentaires que vous pouvez ajouter si le fichier JAR doit afficher une interface graphique.

0
CrazyPyro