我有一个烧瓶应用。该应用程序正在本地运行。我已经拉了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。任何帮助都会有很大帮助。预先感谢。
答案 0 :(得分:0)
发布端口不会更改MySQL模式中的PORT,如果您想使用端口4000
与MySQL容器连接,则只需将4000
与3306
映射即可。
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。
要解决此问题:
# 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
上的数据库。