¿Es posible ejecutar docker-compose up de tal manera que solo se construya si la imagen no está presente en el repositorio?
Estoy trabajando en un escenario de prueba que se ejecutará en dos entornos diferentes: localmente en una computadora portátil y en un servidor como parte de la automatización de pruebas. Mi archivo docker-compose se parece a esto:
services: my-service1: build: "./local-repo1" image: "image1" my-service2: build: "./local-repo2" image: "image2" ... Si lo ejecuto localmente donde existen los directorios locales-repo, funciona bien. Si trato de ejecutarlo en el servidor donde, en cambio, lo extrae de un repositorio acoplable, se queja de que no puede encontrar la ruta de compilación. Si elimino la propiedad de build , funciona bien en el servidor, pero no se ejecutará localmente a menos que construya las imágenes de antemano.
¿Hay alguna manera de hacer que solo intente compilar si la imagen aún no existe? Si no, puedo probar algunas soluciones alternativas, pero preferiría usar solo un archivo docker-compose que maneje cada caso.
Puede usar docker-compose pull para obtener imágenes. Luego, si ya están presentes, Compose no intentará construirlos nuevamente.
Para estar realmente seguro de evitar reconstrucciones, puede usar --no-build .
docker-compose pull docker-compose up -d --no-buildSu verdadero problema es que está especificando un contexto de compilación, pero luego intenta usar docker-compose sin que ese contexto de compilación esté presente.
Cuando se ejecuta docker-compose, incluso si no tiene un plan para hacer una compilación , verificará que al menos exista el contexto de compilación. Si no lo hace, fallará.
Todo lo que necesita hacer para satisfacer este requisito es crear un directorio vacío para cualquier contexto de compilación que falte. Eso debería hacer que docker-compose sea lo suficientemente feliz como para ejecutarse.
mkdir -p local-repo1 local-repo2estoy usando docker-compose v2.1
cuando ejecutamos la ventana acoplable, compóngalo, verifique que la imagen exista o no. si no existe, solo construye esa imagen; de lo contrario, omitirá esa parte
docker-compose
version: '2.1' services: devimage: image: nodedockertest build: . environment: NODE_ENV: development ports: - 8000:8000