You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Docker Compose使Flask应用连接本地MySQL数据库

解决方案

要让Docker中的Flask应用连接本地主机的MySQL,需从Docker配置、Flask数据库连接和本地MySQL设置三方面调整:

1. 修改docker-compose.yml配置

移除原有的db和phpmyadmin服务,同时调整app服务的网络配置,让容器能访问本地主机:

version: "3"
services:
  app:
    build: .
    container_name: app
    ports:
      - "5000:5000"
    # **关键配置**:让容器解析到宿主机的特殊域名
    extra_hosts:
      - "host.docker.internal:host-gateway"
    # 若为Linux系统,也可直接使用host网络模式(可选)
    # network_mode: "host"
    # 使用host网络时需注释ports映射,容器将直接复用主机端口

networks:
  default:
    external: false

说明:host.docker.internal是Docker官方提供的宿主机映射域名,host-gateway会自动匹配宿主机网关IP(Docker 20.10+版本支持)。

2. 调整Flask的数据库连接字符串

在Flask应用的配置文件(如app.py)中,将原容器MySQL地址替换为host.docker.internal,并使用本地MySQL的账号、密码和数据库名:

示例1:使用SQLAlchemy

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 替换为你的本地MySQL信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://本地用户名:本地密码@host.docker.internal:3306/目标数据库名'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

示例2:直接使用mysql-connector

import mysql.connector

db_conn = mysql.connector.connect(
  host="host.docker.internal",
  user="本地用户名",
  password="本地密码",
  database="目标数据库名"
)

3. 本地MySQL的必要设置

确保本地MySQL允许容器的访问请求:

  • 登录本地MySQL,给目标用户授予远程访问权限:
    GRANT ALL PRIVILEGES ON 目标数据库名.* TO '本地用户名'@'%' IDENTIFIED BY '本地密码';
    FLUSH PRIVILEGES;
    
  • 修改MySQL配置文件(如my.cnf/my.ini),将bind-address设置为0.0.0.0(允许所有IP访问),随后重启MySQL服务。

4. Dockerfile无需修改

你的原Dockerfile保持不变即可,镜像构建逻辑无需调整。


内容的提问来源于stack exchange,提问作者KALAGA Serge Eric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:10:16