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

MacOS Docker容器内Go应用无法连接本地MySQL服务器问题排查

问题描述

在MacOS Sonoma系统中,本地直接运行Go应用可正常连接本地MySQL服务器,但将应用打包为Docker容器运行时,出现连接拒绝错误:

dial tcp 127.0.0.1:3306: connect: connection refused

两种场景使用相同的连接字符串:

user:pw@tcp(127.0.0.1:3306)/raw_data?parseTime=true

已尝试的操作:

  • 执行docker run --net=host <latest image id>启动容器
  • 执行docker run -p 3306:3306 <image id>启动容器
  • MySQL配置文件sql.cnf已设置bind-address = 0.0.0.0并重启服务
  • 已为MySQL用户执行授权:GRANT ALL ON *.* TO user@%``
解决方案

1. 替换连接字符串中的127.0.0.1为宿主机局域网IP

Docker容器内的127.0.0.1指向容器自身,而非Mac宿主机。你需要:

  • 查看宿主机局域网IP:执行ifconfig | grep inet,找到格式为inet 192.168.x.x的地址
  • 修改连接字符串为:
    user:pw@tcp(192.168.x.x:3306)/raw_data?parseTime=true
    

2. 使用Docker for Mac专属宿主机别名host.docker.internal

Docker for Mac内置了host.docker.internal别名,可直接映射到宿主机,无需手动查询IP:
修改连接字符串为:

user:pw@tcp(host.docker.internal:3306)/raw_data?parseTime=true

3. 注意--net=host在MacOS Docker的局限性

Docker for Mac的--net=host模式无法完全复用宿主机网络栈,和Linux平台的行为不同,因此该参数无法解决此问题,建议优先使用上述两种方法。

4. 验证MacOS防火墙是否拦截MySQL端口

检查防火墙是否允许MySQL的3306端口对外访问:

  • 打开「系统设置」→「网络」→「防火墙」→「防火墙选项」
  • 确保mysqld进程被允许接收传入连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:42:43