繁体   English   中英

无法从 flask 应用程序连接 dockerized mysql 容器

[英]Can't connect dockerized mysql container from flask app

我正在尝试使用 flask 和 mysql 制作一个 dockerized 应用程序。

但是我在 Flask-SQLAlchemy 上遇到了 exec db.create_all()错误。

我已经确认可以连接以下内容。

您能告诉我是否还有其他设置错误吗?

mysql -h 127.0.0.1 -u root -P 3306 -p flask_db
Enter password:
mysql> 
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from .views import api
from datetime import datetime

app = Flask(__name__)
app.config.update(
    SQLALCHEMY_DATABASE_URI = "mysql://root:flask-db@127.0.0.1:3306/flask_db",
    SQLALCHEMY_TRACK_MODIFICATIONS = False,
)
db = SQLAlchemy(app)
app.register_blueprint(api)

class User(db.Model):
  __tablename__ = 'users'

  id = db.Column(db.Integer, primary_key=True)
  created_at = db.Column(db.DateTime, nullable=False, default=datetime.now())
  updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now(), onupdate=datetime.now())

  def __init__(self, name):
    self.name = name
root@c8676d815528:/api# flask shell
Python 3.9.9 (main, Dec 21 2021, 07:09:55) 
[GCC 8.3.0] on linux
App: app [development]
Instance: /api/instance
>>> from app import db
>>> db
<SQLAlchemy engine=mysql://root:***@127.0.0.1:3306/flask_db?charset=utf8>
>>> db.create_all()
...
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")

我正在使用mysqlclient,所以我也尝试了以下方法,结果相同。

SQLALCHEMY_DATABASE_URI = "mysql+mysqldb://root:flask-db@127.0.0.1/flask_db"
.
├── Dockerfile
├── README.md
├── app
│   ├── __init__.py
│   ├── models.py
│   └── views.py
├── db
│   └── mysql
│       └── volumes
├── docker-compose.yml
├── requirements.txt
version: "3.8"
services:
  db:
    platform: linux/x86_64
    image: mysql:8.0.27
    container_name: flask-backend-db
    environment:
      MYSQL_ROOT_PASSWORD: flask-db
      MYSQL_PASSWORD: flask-db
    ports:
      - "3306:3306"
    volumes:
      - ./db/mysql/volumes:/var/lib/mysql
  api:
    build:
      context: .
      dockerfile: ./Dockerfile
    container_name: flask-backend
    command: bash -c "flask run --host=0.0.0.0 --port=80"
    volumes:
      - .:/api
    ports:
      - "5000:80"
    depends_on:
      - db

版本

  • Python:3.9.9
  • Flask:2.0.2
  • MySQL:8.0.27

谢谢你,图灵85。! 关于简单的 docker 配置,我错了。

SQLALCHEMY_DATABASE_URI = "mysql://root:flask-db@127.0.0.1:3306/flask_db",

SQLALCHEMY_DATABASE_URI = "mysql://root:flask-db@flask-backend-db:3306/flask_db",

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM