首页 > 解决方案 > 如何使用 sql-alchemy 从烧瓶应用程序连接到 mysql docker 容器

问题描述

我有一个烧瓶应用程序。此应用程序在本地运行。我已经拉了 mysql:5.7 并且它正在运行。我想从烧瓶应用程序的 mysql:5.7 容器中创建一个数据库并使用它。我正在使用 sql_alchemy。

我给了uri

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@172.17.0.2:4000/document_generator'

其中 root 和 root 分别是 mysql 用户名和密码。172.17.0.2 是mysql容器的ip地址。我已经使用运行容器

docker run  -p 4000:4000  -e MY_SQL_ROOT_PASSWORD=root mysql:5.7

我已经暴露了端口 4000。但是,当我进入容器并尝试

show global variables like 'port';

它给了 3306 作为端口。

我尝试使用 SQL_ALCHEMY_URI 中的两个端口,但它们都无法创建数据库。我还尝试将 mysql:// 更改为 mysql+pymsql://。甚至那个力气。我已经在 models.py 中编写了表创建代码

class Users(db.Model):
__tablename__ = 'users'
username = db.Column(db.String(128), nullable=True)
password = db.Column(db.String(256), nullable=False)
private_id = db.Column(db.String(128), primary_key=True)

我希望在运行烧瓶应用程序时在 mysql 容器中创建数据库。我对docker-compose一无所知。任何帮助都会有很大帮助。提前致谢。

标签: mysqldockerflask

解决方案


发布端口不会改变 MySQL 模式中的 PORT,如果你想使用端口连接 MySQL 容器,你4000只需要映射.40003306

docker run  -p 4000:3306  -e MY_SQL_ROOT_PASSWORD=root mysql:5.7

还会建议使用docker 网络而不是容器的 IP,因为 IP 经常更改。

但是如果你想在端口上启动 MySQL,4000你可以尝试类似的东西

docker run -it -p 4000:4000  -e MY_SQL_ROOT_PASSWORD=root mysql:5.7 --port=4000

然后如果你像这样查询

show global variables like 'port';

你会得到4000.


推荐阅读