J'ai un docker-compose.yml
configuration. L'un des conteneurs est un serveur Tomcat et il a un _ .war
fichier déployé dans le répertoire webapps
.
Je veux avoir la possibilité de passer (remplacer) l'archive war
à déployer par certains qui réside sur la machine hôte. Je pense que le mieux serait d'avoir en quelque sorte la possibilité de changer/remplacer le démarrage docker-compose
: par défaut, je veux exécuter la webapp (fichier war
) qui est à l'intérieur du conteneur, mais je veux avoir la possibilité de monter un répertoire à partir de mon hôte (par exemple pendant le développement/débogage) si besoin est.
Actuellement, j'ai la ligne suivante dans mon docker-compose.yml
, qui est commenté si j'ai besoin de la valeur par défaut.
volumes:
# By default, there is the latest version of the application already present in the container
# If you want to provider the container with your own .war file, uncomment the following line
# - ./application/webapps:/usr/local/Tomcat/webapps
Y a-t-il une meilleure façon de réaliser cela?
Au lieu de (pas) monter un volume commentant cette ligne, j'utiliserais https://docs.docker.com/compose/extends/#example-use-case pour exécuter une extension de service qui spécifie un volume.
Je fais cela pour résoudre deux problèmes différents:
Disons que le nom de fichier .war est "app.war" ... vous pouvez le remplacer en utilisant une variable env comme celle-ci:
volumes: - ./application/webapps/${APPLICATION_ENV}.war:/usr/local/Tomcat/webapps/app.war
Ensuite, lorsque vous devez exécuter un autre fichier war, modifiez simplement le APPPLICATION_ENV
valeur à celle dont vous avez besoin pour exécuter et redémarrer le conteneur.
Je ne pense pas docker-compose
possède des "volumes conditionnels", mais de cette façon, vous pouvez modifier app.war en fonction de votre environnement.
Une autre façon serait d'exécuter un script après le docker-compose up/start
pour l'écraser et ne le faire qu'en cas de besoin, comme:
docker-compose exec nom-de-votre-conteneur cp /a/volume/path/app.war /usr/local/Tomcat/webapps/app.war