我在本地 (MacOS Sonoma) 运行一个 go 应用程序,它连接到本地 mysql 服务器。当我构建应用程序并从命令行运行它时,它工作正常。当我创建一个容器并运行它时 - 全部在本地 - 它无法连接。确切的错误:
dial tcp 127.0.0.1:3306: connect: connection refused
我在这两种情况下使用的连接字符串是:
user:pw@tcp(127.0.0.1:3306)/raw_data?parseTime=true
当我运行 docker 时我使用:
docker run --net=host <latest image id>
我的 sql.cnf 如下所示:
[mysqld]
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
[client-server]
bind-address = 0.0.0.0
我尝试重启服务器,但没有任何变化。服务器上的用户权限如下所示:
GRANT ALL ON *.* TO `user`@`%`
我也尝试过像这样运行容器:
docker run -p 3306:3306 <image id>
问题是 127.0.0.1 是 Docker 容器内的环回,而不是主机上的环回。在容器中运行代码时,需要指定主机的 IP 地址。
将连接字符串更新为:
这样,您现在引用的是主机,而不是容器的环回接口。