Search code examples
javapostgresqlspring-bootdatabase-migrationflyway

Flyway can't find migrations when database is run on docker container


I have been following this tutorial trying to set up a database using flyway migration scripts. The only difference with the tutorial is that I have been trying to use it in a Spring Boot application. For some reason, when I run "docker-compose up" I always get the the following logging in my terminal.

flyway_1 | Flyway Community Edition 7.5.3 by Redgate flyway_1 | Database: jdbc:postgresql://postgres:5432/db-name (PostgreSQL 12.2) flyway_1 | Successfully validated 0 migrations (execution time 00:00.041s) flyway_1 | WARNING: No migrations found. Are your locations set up correctly? flyway_1 | Current version of schema "public": << Empty Schema >> flyway_1 | Schema "public" is up to date. No migration necessary.

However, I have a migration script under src/main/resources/db/migration. I am not sure why it is not able to find it, as it seems that is where flyway is supposed to look for them by default.

Here is my docker-compose.yml file

version: '3'
services:
  flyway:
    image: flyway/flyway:7.5.3
    command: -configFiles=/flyway/conf/flyway.config -locations=filesystem:/flyway/sql -connectRetries=60 migrate
    volumes:
    - ${PWD}/src/main/java/resources/db/migration
    - ${PWD}/docker-flyway.config:/flyway/conf/flyway.config
    depends_on:
    - postgres
  postgres:
    image: postgres:12.2
    restart: always
    ports:
    - "5432:5432"
    environment:
    - POSTGRES_USER=example-username
    - POSTGRES_PASSWORD=pass
    - POSTGRES_DB=db-name

And here is my docker-flyway.config file.

flyway.url=jdbc:postgresql://postgres:5432/db-name
flyway.user=example-username
flyway.password=pass
flyway.baselineOnMigrate=false

Solution

  • I realized that I had one of the volume mappings written incorrectly in my docker-compose.yml file. I don't exactly understand the mapping itself, but after copying what was in this post it ran the migration script properly.