hub - ¿Cuál es la alternativa para condicionar la forma de depende de la versión 3 de docker-compose?
docker search (2)
Ha habido un alejamiento de la especificación de dependencias de contenedores en la composición. Solo son válidos en el momento del inicio y no funcionan cuando los contenedores dependientes se reinician en el tiempo de ejecución. En su lugar, cada contenedor debe incluir un mecanismo para volver a intentar conectarse a los servicios dependientes cuando se interrumpa la conexión. Muchas bibliotecas para conectarse a bases de datos o servicios de API REST tienen reintentos integrados configurables. Yo miraría en eso. Es necesario para el código de producción de todos modos.
docker-compose 2.1 ofrece la característica agradable para especificar una condition
con depends_on
. La documentación actual de la ventana acoplable-componer establece:
La versión 3 ya no es compatible con el formato de condición Depender_on.
Desafortunadamente, la documentation no explica por qué se eliminó el formulario de la condition
y falta alguna recomendación específica sobre cómo implementar ese comportamiento utilizando V3 hacia arriba.
Hay algunas herramientas externas que te permiten imitar este comportamiento. Por ejemplo, con la herramienta dockerize puede envolver su CMD
o ENTRYPOINT
con dockerize -wait
y eso evitará que se ejecute su aplicación hasta que los servicios especificados estén listos.
Si su archivo de composición acoplable solía verse así:
version: ''2.1''
services:
kafka:
image: spotify/kafka
healthcheck:
test: nc -z localhost 9092
webapp:
image: foo/bar # your image
healthcheck:
test: curl -f http://localhost:8080
tests:
image: bar/foo # your image
command: YOUR_TEST_COMMAND
depends_on:
kafka:
condition: service_healthy
webapp:
condition: service_healthy
entonces puede usar dockerize
en su archivo de composición v3
como este:
version: ''3.0''
services:
kafka:
image: spotify/kafka
webapp:
image: foo/bar # your image
tests:
image: bar/foo # your image
command: dockerize -wait tcp://kafka:9092 -wait web://webapp:8080 YOUR_TEST_COMMAND