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)")