Disfruto mucho usando docker-compose.
P.ej. en mi servidor, cuando quiero actualizar mi aplicación con cambios menores, solo necesito git pull origin master && docker-compose restart , funciona perfectamente.
Pero a veces, necesito reconstruir (por ejemplo, agregué una dependencia de npm, necesito ejecutar npm install nuevamente).
En este caso, hago docker-compose build --no-cache && docker-compose restart .
Esperaría que esto:
Pero en la práctica parece reiniciar el anterior de nuevo.
¿Es el comportamiento esperado?
¿Cómo puedo manejar una reconstrucción y comenzar una nueva después de que se construya?
¿Quizás me perdí un comando específico? ¿O tendría sentido tenerlo?
desde el reinicio manual de docker-compose
Si realiza cambios en su configuración de docker-compose.yml, estos cambios no se reflejarán después de ejecutar este comando.
deberías poder hacer
$docker-compose up -d --no-deps --build <service_name> --no-deps no iniciará los servicios vinculados.
El problema es que restart reiniciará sus contenedores actuales, que no es lo que desea.
Como ejemplo, acabo de hacer esto.
docker-compose build para construir las imágenesdocker-compose down 1 y docker-compose updocker-compose restart NO funcionará aquídocker-compose start en su lugar tampoco funciona Para ser honesto, no estoy completamente seguro de que primero deba hacer un down , pero eso debería ser fácil de verificar. 1 La conclusión es que debe llamar up . Verá que se reinician los contenedores de imágenes sin cambios, pero para la imagen modificada verá recreating .
La ventaja de esto sobre simplemente llamar up --build es que puede ver el proceso de construcción primero antes de reiniciar.
1: de los comentarios; down no es necesario, simplemente puede llamar up --build . Down tiene algunos aspectos negativos, incluida la posibilidad de que sea destructivo para sus datos (de volumen).
Use el indicador --build para el comando up , junto con el indicador -d para ejecutar sus contenedores en segundo plano:
docker-compose up -d --buildEsto reconstruirá todas las imágenes definidas en su archivo de redacción, luego reiniciará cualquier contenedor cuyas imágenes hayan cambiado.
-d asume que no desea mantener todo funcionando en primer plano de su shell. Esto hace que actúe más como restart , pero no es obligatorio.