Как подключить мое flask веб-приложение к базе данных mysql? Не удается подключиться mysql и не найден шаблон рендеринга - PullRequest
0 голосов
/ 18 февраля 2020

Я новичок в docker и пытаюсь развернуть это веб-приложение, но не могу найти решение. Я использую windows 10 и Docker Desktop. Моя docker -версия 19.03.5 и docker -составляют версию 1.25.4, сборка неизвестна.

Моя структура каталогов:

  -docker-compose.yml
  -app
     -static
          js/
            script.js
          css/
              style.css
     -templates
            -index.html
     -app.py
     -dockerfile
     -requirements.txt
  -db
    -init.sql

docker -compose.yml

version: "2"
services:
app:
  build: ./app
  links:
    - db
  ports:
    - "5000:5000"

db:
  image: mysql:5.7
  ports:
    - "32000:3306"
  environment:
    MYSQL_ROOT_PASSWORD: root
  volumes:
    - ./db:/docker-entrypoint-initdb.d/:ro

dockerfile

FROM python:3.6
EXPOSE 5000
RUN mkdir -p /app
RUN ls /app
COPY static /app/static
COPY templates /app/templates
COPY app.py /app
COPY requirements.txt /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD python app.py

needs.txt

flask
mysql-connector

app.py

from flask import Flask, render_template, request
import mysql.connector
import os

app = Flask(__name__, template_folder='/templates', static_folder='/static')
@app.route('/')
def index():
    connection = mysql.connector.connect(
        user = 'root',
        password = 'root',
        host= 'db',
        port = '3306',
        database = 'test'
    )
    cursor = connection.cursor()
    cursor.execute("SELECT name from place")
    names = cursor.fetchall()
    return render_template('index.html', names = names)
if __name__ == '__main__':
    app.run(host='0.0.0.0')

Моя docker команда - -

docker-compose up

Затем попытка доступа http://0.0.0.0 : 5000 / , но получить mysql .connector.errors.InterfaceError: 2003: Невозможно подключиться к MySQL серверу на 'db: 3306' и jinja2.exceptions.TemplateNotFound:

1 Ответ

0 голосов
/ 18 февраля 2020

jinja2.exceptions.TemplateNotFound

Ваши flask пути к папкам неверны, это должен быть либо абсолютный путь, например /app/templates и /app/static, либо относительный, например templates abnd static.

mysql .connector.errors.InterfaceError: 2003: Невозможно подключиться к MySQL серверу на 'db: 3306'

Если ваш скрипт init. sql правильный, значит, в вашей базе данных нет ничего плохого, вы просто позволили ей правильно инициализироваться (дождитесь сообщения mysqld: ready for connections) перед отправкой вашего первого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...