Having an ERROR while running docker-compose, it doesnt wait for my database to be ready

Viewed 38

I'm trying to run a flask application with a Mysql database with docker-compose. However I tried using a lot of techniques to make my docker-compose wait for the database to be ready before firing my flask application. This is my docker-compose file

version: "3.7"

services:
  waitfordb:
        image: dadarek/wait-for-dependencies
        depends_on:
            mysql:
              condition: service_completed_successfully
        environment:
            MYSQL_PORT: "5432"
        networks:
            - backend
        command: mysql:5432
  mysql:
    image: mysql:5.7
    ports:
      - "5432:5432"
    networks:
      - backend
    volumes:
      - ./mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "12345678"
      MYSQL_DATABASE: flaskmysql
  web:
    build: .
    depends_on:
      mysql:
        condition: service_completed_successfully
      waitfordb:
        condition: service_completed_successfully
    ports:
      - 5000:5000
    
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: "12345678"
      MYSQL_DB: flaskmysql
  
networks:
    backend:
        driver: bridge

and in my flask application I've got:

app.config['SQLALCHEMY_DATABASE_URI']= f"mysql+pymysql://{config.MYSQL_USER}:{config.MYSQL_PASS}@5432/flaskmysql"

I'm trying to run:

docker-compose --env-file .env up 

But I'm getting this error:

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '5432' (timed out)")
1 Answers

Specify "mysql" (container's name) as a host.

final uri is : "mysql+pymysql://USER:PASS@mysql:5432/flaskmysql"

Related