Solución:
En 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:
- No especifico un volumen cuando la imagen de la ventana acoplable está destinada a ejecutarse en producción y tiene todos los archivos necesarios incluidos.
- Especifico un volumen durante el desarrollo, para verificar los cambios en vivo.
Ya que extend
se ha eliminado 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
Dónde docker-compose.yml
contiene la configuración completa y docker-compose.dev.yml
solo agrega un volumen
services:
serviceA:
volumes:
-.:/usr/local/abc/service
Digamos que el nombre de archivo .war es “app.war” … podrías sobrescribirlo usando una variable env como esta:
volumes: - ./application/webapps/${APPLICATION_ENV}.war:/usr/local/tomcat/webapps/app.war
Luego, cuando necesite ejecutar un archivo war diferente, simplemente cambie el APPPLICATION_ENV
valor al que necesita para ejecutar y reiniciar el contenedor.
No creo docker-compose
tiene “volúmenes condicionales”, pero de esa manera podría cambiar el archivo app.war de acuerdo con su entorno.
Otra forma sería ejecutar un script después de la docker-compose up/start
para sobrescribirlo y hacerlo solo cuando sea necesario, como:
docker-compose exec your-container-name cp /a/volume/path/app.war /usr/local/tomcat/webapps/app.war