Tengo una configuración docker-compose.yml . En uno de los contenedores hay un servidor Tomcat y tiene un archivo .war predeterminado implementado en el directorio webapps .
Quiero tener la capacidad de pasar (anular) el archivo de war para ser implementado por algunos que residen en la máquina host. Creo que lo mejor sería tener la capacidad de cambiar / anular de alguna manera el inicio docker-compose : de forma predeterminada, quiero ejecutar la aplicación web (archivo war ) que está dentro del contenedor, pero quiero tener la posibilidad de montar un directorio desde mi host (por ejemplo, durante el desarrollo/depuración) si es necesario.
Actualmente, tengo la siguiente línea en mi docker-compose.yml , que se comenta si necesito el valor predeterminado.
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¿Hay una mejor manera de cómo lograr eso?
Dado que extend se eliminó en la versión 3, hay una nueva forma de anular la configuración al proporcionar múltiples parámetros -f donde el siguiente archivo extiende la configuración anterior
Los documentos se mezclan entre versiones https://docs.docker.com/compose/extends/#multiple-compose-files
es decir, para ejecutar en modo de desarrollo
docker-compose -f docker-compose.yml -f docker-compose.dev.yml Donde docker-compose.yml contiene la configuración completa y docker-compose.dev.yml solo agrega un volumen
services: serviceA: volumes: -.:/usr/local/abc/serviceEn lugar de (no) montar un volumen comentando esa línea, usaría https://docs.docker.com/compose/extends/#example-use-case para ejecutar una extensión de servicio que especifica un volumen.
Hago esto para abordar dos problemas diferentes:
Digamos que el nombre del archivo .war es "app.war"... podrías sobrescribirlo usando una variable env como esta:
volúmenes:
- ./application/webapps/${APPLICATION_ENV}.war:/usr/local/tomcat/webapps/app.war
Luego, cuando necesite ejecutar un archivo war diferente, simplemente cambie el valor de APPPLICATION_ENV al que necesita para ejecutar y reinicie el contenedor.
No creo que docker-compose tenga "volúmenes condicionales", pero de esa manera podría cambiar app.war de acuerdo con su entorno.
Otra forma sería ejecutar un script después de que docker-compose up/start lo sobrescriba, y hacerlo solo cuando sea necesario, como:
docker-compose exec nombre-de-su-contenedor cp /a/volume/path/app.war /usr/local/tomcat/webapps/app.war