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

本地Go程序连接Docker中MySQL遇连接拒绝问题求解决方案

不用docker-compose解决本地Go程序连接Docker中MySQL的问题

先明确两个错误的原因

  • 用localhost:3306报错连接拒绝:要么是创建容器时没做端口映射,本地无法访问容器内的3306端口;要么是容器内的MySQL只绑定了127.0.0.1(仅容器内部可访问),即使映射了端口也没用。
  • 用容器名db01报错找不到主机:容器名的DNS解析只在同一个Docker网络内部生效,本地Go程序不在Docker网络里,自然解析不了这个名字。

两种不用docker-compose的解决方法

方法1:端口映射+localhost访问

  1. 重新创建容器时加上端口映射参数(如果已创建容器,先停删再重建):

    docker run -d -p 3306:3306 --name db01 -e MYSQL_ROOT_PASSWORD=你的密码 mysql:latest
    
    • -p 3306:3306是把容器的3306端口映射到本地的3306端口
    • 官方MySQL镜像默认让MySQL绑定0.0.0.0(允许所有IP访问),无需额外修改配置
  2. Go代码里的DSN改成:

    dsn := "root:你的密码@tcp(localhost:3306)/你的数据库名?charset=utf8mb4&parseTime=True&loc=Local"
    

方法2:直接用容器IP访问(无需端口映射)

  1. 先查询容器的内部IP:

    docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' db01
    

    执行后会输出类似172.17.0.2的IP地址

  2. Go代码里用这个IP替换localhost:

    dsn := "root:你的密码@tcp(172.17.0.2:3306)/你的数据库名?charset=utf8mb4&parseTime=True&loc=Local"
    
    • 注意:容器重启后IP可能会变化,适合临时测试场景

额外检查项

  • 确认容器在运行:执行docker ps,查看db01的状态为Up
  • 确认容器内MySQL正常:执行docker exec -it db01 mysql -uroot -p,输入密码能进入MySQL命令行即可
  • 确认Go代码导入了MySQL驱动:必须添加_ "github.com/go-sql-driver/mysql"(仅注册驱动,无需直接调用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:30:34