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

无法从本地WSL2设备远程连接到VPS上的Docker化MySQL容器

无法从本地WSL2设备远程连接到VPS上的Docker化MySQL容器

看起来你遇到的问题挺典型的——既然PC上之前配置好的Datagrip还能正常连接,说明VPS端的核心配置(容器通信、MySQL基础设置)是没问题的,问题大概率出在笔记本WSL2的网络、权限或者防火墙限制上,咱们一步步来排查:

  • 先确认VPS端的防火墙/安全组规则
    虽然你提到端口已经暴露,但要仔细检查两个关键位置:

    1. DigitalOcean云控制台的安全组(Firewall):看看是否允许你笔记本当前的公网IP访问${DB_PORT}端口,或者暂时设置为允许所有IP(测试完成后记得改回更严格的规则)。
    2. VPS本地的ufw防火墙:登录VPS执行ufw status,确认有ALLOW IN ${DB_PORT}的入站规则,如果没有就添加:ufw allow ${DB_PORT}/tcp。
  • 排查WSL2的网络连通性
    WSL2默认使用NAT网络模式,偶尔会出现网络访问异常:

    1. 先在笔记本的WSL2终端里ping VPS的公网IP,看看能不能通。如果ping不通,试试重启WSL:执行wsl --shutdown,然后重新打开WSL终端再测试。
    2. 跳过WSL,直接在笔记本的Windows系统里用MySQL客户端(比如cmd里的mysql命令)连接VPS的MySQL端口,如果能通,说明问题出在WSL2的网络配置上;如果也不通,那就是笔记本的网络环境(比如家里/公司的防火墙)限制了访问。
  • 检查MySQL用户的访问权限
    你在docker-compose里设置了MYSQL_ROOT_HOST=%,但别忘了你可能用的是普通用户(${DB_USERNAME})连接,这个用户的host权限可能被限制了:

    1. 登录VPS,进入MySQL容器:
      docker exec -it mysql mysql -u root -p${DB_PASSWORD}
      
    2. 查看所有用户的访问权限:
      SELECT user, host FROM mysql.user;
      
    3. 如果你的普通用户的host不是%(比如是localhost或者容器内部的IP),就修改权限:
      ALTER USER '${DB_USERNAME}'@'%' IDENTIFIED BY '${DB_PASSWORD}';
      FLUSH PRIVILEGES;
      

    这很可能是问题核心——PC的Datagrip可能是在权限修改前就配置好的,或者用了root用户,而笔记本用普通用户连接时被权限拦截了。

  • 验证Docker端口映射的正确性
    确认docker-compose里的端口映射和MySQL容器内部的监听端口一致:

    1. 进入MySQL容器,查看监听的端口:
      docker exec -it mysql netstat -tulpn | grep mysql
      
    2. 确保输出里显示的是0.0.0.0:${DB_PORT}(比如默认的3306),如果容器内部MySQL监听的是其他端口,那你需要调整docker-compose的ports映射,或者在MySQL配置文件里修改端口为${DB_PORT}。
  • 核对连接命令的正确性
    确保你在笔记本WSL2里用的连接命令没有错误,比如:

    mysql -u ${DB_USERNAME} -p${DB_PASSWORD} -h <VPS公网IP> -P ${DB_PORT}
    

    别把<VPS公网IP>写成localhost或者WSL2的IP,也别写错端口号或密码。

备注:内容来源于stack exchange,提问作者aspirinemaga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 08:40:28