我有一个 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。但是,当我获取容器并尝试时
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 不了解。任何帮助都会有很大帮助。提前致谢。
最佳答案
您的 docker run
命令将要发布的端口指定为 4000:4000
。
:
的左侧是 4000
,这是您本地计算机上的端口,这没问题。
但是:
的右侧也是4000
是运行MySQL的容器内的端口。 MySQL 的默认端口是 3306
,而不是 4000
,因此您尝试通过错误的端口访问 MySQL。
要解决这个问题:
- 停止 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>
- 使用正确的端口重新创建容器
$ docker run -p 4000:3306 -e MY_SQL_ROOT_PASSWORD=root mysql:5.7
现在应该可以工作了。
奖金
Docker 也在本地主机上公开容器。您还可以访问 localhost:4000
上的数据库。
关于mysql - 如何使用 sql-alchemy 从 Flask 应用程序连接到 mysql docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59420428/