I am attempting to build a bridge between my flask application and my database using two separate containers rather than the mysql connector. I am using flask_mysqldb for my app.
---docker-compose
App
|
|--app.py
|--dockerfile
db
|
|--dockerfile
|--db.sql
This is My Docker-compose file
version: '2'
services:
pythonapp:
build: ./NewtestPythonProject
command: sh -c "sleep 10s ; python3 ./main.py"
ports:
- '5000:5000'
depends_on:
- mysql
mysql:
build: ./MyDbDockerFile
restart: always
environment:
MYSQL_DATABASE: 'profile'
MYSQL_ROOT_PASSWORD: '1234'
ports:
- '3306:3306'
This is my Database Dockerfile
FROM mysql:latest
COPY ./dcs.sql /docker-entrypoint-initdb.d/
This is my app dockerfile
FROM python:3.9
WORKDIR /usr/app/src
COPY . /usr/app/src/
RUN pip3 install -r requirements.txt
EXPOSE 5000
This is My Connection String
from flask import *
from flask_mysqldb import MySQL
import yaml,re
import MySQLdb.cursors
from passlib.hash import pbkdf2_sha256
app = Flask(__name__)
app.secret_key = 'This'
#-----------------------------database connection-----------
db = yaml.load(open("db.yaml"),Loader=yaml.FullLoader)
app.config["MYSQL_HOST"] = db['mysql_host']
app.config["MYSQL_USER"] = db['mysql_user']
app.config["MYSQL_PASSWORD"] = db['mysql_password']
app.config["MYSQL_DB"] = db['mysql_db']
MySQL = MySQL(app)
Db.yaml
mysql_host: "localhost"
mysql_user: "root"
mysql_password: "1234"
mysql_db: "profile"