Flask 无法连接到 Docker Compose 中的 MySQL 可能是由多种原因造成的。以下是一些基础概念、可能的原因、解决方案以及相关的应用场景和优势。
Flask: 是一个轻量级的 Web 应用框架,用 Python 编写。 Docker Compose: 是一个用于定义和运行多容器 Docker 应用程序的工具。 MySQL: 是一个流行的关系型数据库管理系统。
确保 Flask 应用和 MySQL 容器在同一个 Docker 网络中。可以在 docker-compose.yml
文件中定义一个网络,并让两个服务都连接到这个网络。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
networks:
- app-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: flaskapp
networks:
- app-network
networks:
app-network:
确保 MySQL 容器的端口正确映射到宿主机。在上面的 docker-compose.yml
示例中,MySQL 默认端口 3306 已经映射到了宿主机的 3306 端口。
在 Flask 应用中使用的数据库连接字符串应该包含正确的用户名、密码和数据库名。
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:example@db/flaskapp'
使用 docker-compose ps
命令检查 MySQL 容器是否正在运行。如果容器没有运行,可以使用 docker-compose logs db
查看日志找出原因。
如果使用了初始化脚本,确保脚本没有错误,并且 MySQL 容器在启动时能够成功执行这些脚本。
应用场景:
优势:
以下是一个简单的 Flask 应用示例,它尝试连接到 Docker Compose 中的 MySQL 服务。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:example@db/flaskapp'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
@app.route('/')
def index():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
确保 docker-compose.yml
文件和 Flask 应用的配置正确无误,这样 Flask 应用就能够成功连接到 MySQL 服务了。
领取专属 10元无门槛券
手把手带您无忧上云