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

主机Flask应用无法连接VM中Docker部署的MySQL求助

排查思路:本地Flask无法连接VirtualBox中Docker部署的MySQL
  • 修正Flask连接地址
    主机无法直接访问VirtualBox虚拟机内Docker容器的私有子网IP,别用容器IP+3306。直接复用你本地mysql命令的参数:连接地址填127.0.0.1,端口填7703,和你能成功连接的命令mysql -h 127.0.0.1 -P 7703 -u root -p一致。
    检查Flask代码里的数据库URL,示例格式:

    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:你的密码@127.0.0.1:7703/你的数据库名'
    
  • 验证MySQL绑定配置
    进入VM的MySQL容器,确认MySQL允许外部访问:

    • 查看配置文件:cat /etc/mysql/my.cnf | grep bind-address,确保输出是bind-address = 0.0.0.0(不是127.0.0.1)
    • 或者在MySQL命令行执行:SHOW VARIABLES LIKE 'bind_address';,结果应为0.0.0.0
  • 检查Docker容器端口映射
    在VM内执行docker ps,查看MySQL容器的端口映射列,必须是0.0.0.0:xxx->3306/tcp格式(xxx是VM内的端口,对应VirtualBox端口转发的VM端端口)。如果是127.0.0.1:xxx->3306/tcp,只能VM内部访问,需重新启动容器并指定绑定0.0.0.0,比如:

    docker run -d -p 0.0.0.0:3306:3306 --name mysql-container mysql:latest
    
  • 检查VM系统防火墙
    确认VirtualBox虚拟机的系统防火墙没有拦截Docker映射的端口:

    • Ubuntu:ufw status,确保对应端口(如3306)已开放
    • CentOS/RHEL:firewall-cmd --list-ports,确认端口在开放列表中
  • 验证MySQL用户权限
    确认你使用的MySQL用户允许从主机IP访问:
    登录MySQL执行:

    SELECT user, host FROM mysql.user;
    

    如果目标用户的host是localhost或VM内部IP,执行以下命令修改权限:

    ALTER USER 'root'@'%' IDENTIFIED BY '你的密码';
    FLUSH PRIVILEGES;
    
  • 测试主机端口连通性
    在主机上用工具测试端口是否通畅:

    nc -zv 127.0.0.1 7703
    

    或

    telnet 127.0.0.1 7703
    

    能连通则网络层面无问题,重点检查代码配置和MySQL权限。

内容的提问来源于stack exchange,提问作者DisplayName

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:23:19