services: app: build: context: . dockerfile: Dockerfile image: spring-petclinic:latest ports: - "8080:8080" environment: SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-mysql} SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL:-jdbc:mysql://mysql:3306/petclinic?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC} SPRING_DATASOURCE_USERNAME: ${SPRING_DATASOURCE_USERNAME:-petclinic} SPRING_DATASOURCE_PASSWORD: ${SPRING_DATASOURCE_PASSWORD:-petclinic} depends_on: mysql: condition: service_healthy restart: unless-stopped mysql: image: mysql:9.2 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root} MYSQL_USER: ${SPRING_DATASOURCE_USERNAME:-petclinic} MYSQL_PASSWORD: ${SPRING_DATASOURCE_PASSWORD:-petclinic} MYSQL_DATABASE: ${MYSQL_DATABASE:-petclinic} MYSQL_ALLOW_EMPTY_PASSWORD: "false" volumes: - "./conf.d:/etc/mysql/conf.d:ro" healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost -p${MYSQL_ROOT_PASSWORD:-root}"] interval: 10s timeout: 5s retries: 10 start_period: 20s postgres: image: postgres:18.0 ports: - "5432:5432" environment: POSTGRES_PASSWORD: ${SPRING_DATASOURCE_PASSWORD:-petclinic} POSTGRES_USER: ${SPRING_DATASOURCE_USERNAME:-petclinic} POSTGRES_DB: ${POSTGRES_DB:-petclinic} healthcheck: test: ["CMD-SHELL", "pg_isready -U ${SPRING_DATASOURCE_USERNAME:-petclinic}"] interval: 10s timeout: 5s retries: 10 start_period: 20s profiles: - postgres