[英]Cannot connect to MySql in Docker. Access Denied Error thrown. Flask-SqlAlchemy
好吧,所以一直尝试让这个工作。 这是我从头到尾运行的命令行,我得到一个Access denied...
错误,如下所示。
$ docker-compose up --build -d
$ docker exec -it flaskdocker_mysql_1 mysql -u root -p
mysql> CREATE DATABASE flask_docker;
mysql> CREATE USER `flask-docker`@`localhost` IDENTIFIED BY 'pass';
mysql> GRANT ALL PRIVILEGES ON flask_docker.* TO 'flask-docker'@'localhost';
mysql> exit
Bye
$ docker exec -it flaskdocker_web_1 python /usr/src/app/manage.py createdb
# rest of traceback
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, u"Access denied for user 'flask-docker'@'flaskdocker_web_1.flaskdocker_default' (using password: YES)")
这是repo https://github.com/Amertz08/flask-docker
看起来SqlAlchemy引擎没有查看正确的容器。 'flask-docker'@'flaskdocker_web_1.flaskdocker_default'
出现在错误中。
也许我不理解它,但我在我docker-compose.yml
文件中链接了mysql:mysql
web:
restart: always
build: ./app
volumes:
- /usr/src/app/static
expose:
- "5000"
environment:
FLASK_CONFIG: 'production'
links:
- mysql:mysql
command: /usr/local/bin/uwsgi --ini uwsgi.ini
然后在config.py
中的配置对象中,我有以下内容......
MYSQL_USER = 'flask-docker'
MYSQL_PASS = 'pass'
MYSQL_HOST = 'mysql'
MYSQL_DB = 'flask_docker'
# Database info
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{usr}:{passwd}@{host}/{db}'.format(
usr=MYSQL_USER, passwd=MYSQL_PASS, host=MYSQL_HOST, db=MYSQL_DB
)
任何有关这方面的帮助将不胜感激。
看来那里的问题是:
mysql> GRANT ALL PRIVILEGES ON flask_docker.* TO 'flask-docker'@'localhost';
您为localhost用户授予权限
但是你使用mysql作为flask-docker'@'flaskdocker_web_1.flaskdocker_default
用户。
要为flask-docker'@'flaskdocker_web_1.flaskdocker_default用户解决此授予用户权限
我会在这里添加另一个解决方案,因为我遇到了这个问题。 为了让我从Flask访问数据库,我使用了mysql-connector
(可以通过pip install mysql-connector
),进入mysql shell并运行以下代码ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
然后我使用以下配置连接到mysql:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from .db import db
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:foo@127.0.0.1:3306/bar_db'
db = SQLAlchemy(app)
我仍然不太确定为什么需要这个工作,因为我之前从未故意在任何其他Python应用程序中使用它,但它确实似乎与libmysqlclient一起使用。
src: https : //dev.mysql.com/doc/refman/8.0/en/native-pluggable-authentication.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.