Saltar al contenido

Montar un volumen en docker-compose condicionalmente

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *