python - 无法连接到 Docker 中的 MySql。抛出拒绝访问错误。 Flask-SqlAlchemy

标签 python docker flask flask-sqlalchemy docker-compose

好吧,我已经尝试了一段时间才能让它发挥作用。这是我从头到尾运行的命令行,我收到如下所示的 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 用户授予用户权限

关于python - 无法连接到 Docker 中的 MySql。抛出拒绝访问错误。 Flask-SqlAlchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39171970/

相关文章:

python - 如何获取调用事件的小部件的 ID (Tkinter)

python - 与空 numpy 数组连接

python - 读取 CSV 并按列分隔

python - Docker无法创建conda虚拟环境

mysql - 来自容器外部的 MySQL 内部错误

python - 像在 Django 中一样为 Flask 制作 urls.py 文件

python - SQLAlchemy 查询结果超时

PostgreSQL 客户端无法解析 Docker 容器中的主机名

python - 为什么我的 `else` block 的 `try` 部分的代码没有运行?

flask - 如何从 flask 缓存中检索所有 key ?