Solución:
Supongo que la razón es el hecho de que depends_on
de El flyway
el servicio en realidad no verifica que la base de datos dentro de db-container esté funcionando, pero verifica que el contenedor esté activo. Esto es bastante diferente: el contenedor podría estar en funcionamiento en el momento en que la base de datos dentro de él se está iniciando y aún no acepta la conexión.
Para tal caso, debe especificar una verificación de calor para asegurarse de que su base de datos acepta conexiones. Incluso puede encontrar un ejemplo de cómo hacerlo con PostgreSQL en los documentos oficiales de docker-compose.
La versión ‘3+’ del archivo docker-compose no admite el parámetro condition
en el depends_on
block, pero la versión ‘2.1+’ sí lo hace. Entonces puede crear un archivo de redacción como el siguiente, que usa healthcheck
desde el postgres
sección, por ejemplo:
version: '2.1'
services:
my-app:
# ...
# ...
depends_on:
- flyway
flyway:
image: boxfuse/flyway:5-alpine
command: -url=jdbc:postgresql://postgres:5432/mydb -schemas=public -user=postgres -password=postgres migrate
volumes:
- ./migration:/flyway/sql
depends_on:
postgres:
condition: service_healthy
postgres:
domainname: postgres
build: ./migration
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
healthcheck:
test: ["CMD", "pg_isready", "-q", "-U", "postgres"]
interval: 5s
timeout: 1s
retries: 2