skip to Main Content

I am able to configure usage of ODM and Mongodb with api-platform using official doc. But you still need to define service for postgress (and have orm dependencies installed), otherwise on startup app waits for db and fails on timeout:

php_1         | Waiting for database to be ready...
php_1         | Still waiting for database to be ready... Or maybe the database is not reachable. 59 attempts left.
php_1         | Still waiting for database to be ready... Or maybe the database is not reachable. 58 attempts left.

Here is databases part of docker-compose:

  database:
    image: postgres:13-alpine
    environment:
      - POSTGRES_DB=api
      - POSTGRES_PASSWORD=!ChangeMe!
      - POSTGRES_USER=api-platform
    volumes:
      - db_data:/var/lib/postgresql/data:rw
      # you may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
      # - ./api/docker/db/data:/var/lib/postgresql/data:rw
    expose:
      - 5433

  db-mongodb:
    # In production, you may want to use a managed database service
    image: mongo
    environment:
      - MONGO_INITDB_DATABASE=api
      - MONGO_INITDB_ROOT_USERNAME=api-platform
      # You should definitely change the password in production
      - MONGO_INITDB_ROOT_PASSWORD=!ChangeMe!
    volumes:
      - db_data:/var/lib/mongodb/data:rw
      # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
      # - ./docker/db/data:/var/lib/mongodb/data:rw
    ports:
      - 27017

Any hints what should I change in my configuration to be able to delete database service? I want to keep my setup clean.

2

Answers


  1. According to https://github.com/api-platform/api-platform/blob/main/docker-compose.yml by default
    php service depends_on: database service. Try removing that line or replacing it with your db-mongodb service and then remove database service definition from your docker-compose.yaml.

    depends_on is used to control starting and shutting down containers in the correct order according to defined dependencies, you can find more info here.

    Login or Signup to reply.
  2. The php service is started before the db-mongodb service.

    The depends_on options is not fix this that problem.

    Check https://docs.docker.com/compose/startup-order/

    The simplified version of solution above is to add mongo-db entrypont:

    # wait 5 seconds to start mongo in container
    while :; do echo '.'; sleep 5 ; done
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search