Athus Vieira
Athus Vieira

Reputation: 413

How to use MySQL and Flask-PonyORM App with docker-compose?

I'm having a trouble on how to configure my application to integrate Flask, PonyORM, and MySQL using docker and docker-compose.

This is my .yml file:

version: '3.1'
services:
  mysql:
    image: mysql
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: kofre.db

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

  python:
    build: .
    volumes:
      - .:/kofre-app
    ports:
      - 5000:5000
    depends_on:
      - mysql

This is my Dockerfile:

FROM python:3
ENV PYTHONBUFFERED 1

RUN mkdir /kofre-app

WORKDIR /kofre-app

COPY setup.py /kofre-app/
RUN python setup.py install

COPY . /kofre-app/

CMD [ "python", "./run.py" ]

and this is a part of my Pony initialization script:

app = Flask(__name__)
app.config.from_object('config')

db = Database()
db.bind(provider = 'mysql', host = 'mysql', user = 'root', passwd = 'root', db = 'kofre.db')

My problems:

  1. Sometimes when I run the command docker-compose up I'm getting the message: "Can't connect to MySQL server on 'mysql' (timed out)". Is it a proble with PonyORM? Should I use another framework?
  2. And sometimes, the mysql service seems to lock the prompt and nothing happens after that.

Could someone help me with this problems? I'd appreciate your help.

Upvotes: 1

Views: 679

Answers (1)

Athus Vieira
Athus Vieira

Reputation: 413

After a lot of search and tries, I finally got it working. My problem was the incorrect sintax in my docker-compose.yml in the section of the environment of the mysql container.

Now, my newer docker-compose.yml looks like this:

version: '3'
services:
  python:
    build: .
    container_name: python
    volumes:
      - .:/kofre-app
    ports:
      - 5000:5000
    links:
      - mysql

  adminer:
    image: adminer
    container_name: adminer
    ports:
      - 8000:8080
    links:
      - mysql

  mysql:
    image: mysql:5.6
    container_name: mysql
    restart: always
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=kofre.db
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root

The answer to this problem I found here in this another answer

Upvotes: 1

Related Questions