如何使用SQL-Alchemy从Flask应用程序连接到mysql docker容器

时间:2019-12-20 05:49:52

标签: mysql docker flask

我有一个烧瓶应用。该应用程序正在本地运行。我已经拉了mysql:5.7,它正在运行。我想从flask应用程序在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。但是,当我发现conatiner并尝试

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)

当我运行flask应用程序时,我希望在mysql容器中创建数据库。我不知道docker-compose。任何帮助都会有很大帮助。预先感谢。

2 个答案:

答案 0 :(得分:0)

发布端口不会更改MySQL模式中的PORT,如果您想使用端口4000与MySQL容器连接,则只需将40003306映射即可。

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

由于IP经常更改,因此也建议使用docker network而不是容器的IP。

但是,如果您仍想在端口4000上启动MySQL,则可以尝试类似

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

然后,如果您查询类似

show global variables like 'port';

您将获得4000

答案 1 :(得分:0)

您的docker run命令专用于要发布为4000:4000的端口。

:的左侧是4000,这是您本地计算机上的端口,很好。

但是:的右侧(也是4000)是运行MySQL的容器内部的端口。 MySQL的默认端口是3306,而不是4000,因此您尝试使用错误的端口访问MySQL。

要解决此问题:

  1. 停止docker容器
# Show all the running containers. The last column should be the container name.
$ docker ps

# Stop and remove the container
$ docker rm -f <container name>
  1. 使用正确的端口重新创建容器
$ docker run -p 4000:3306 -e MY_SQL_ROOT_PASSWORD=root mysql:5.7 

现在应该可以了。

奖金

Docker在本地主机上也公开了这些容器。您也可以访问localhost:4000上的数据库。