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?
Il y a une différence entre les images et les conteneurs.
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 .
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.