我在Mac上安装了Mysql Community Server,它已设置并且正在运行,我可以使用Navicat for MySQL在localhost:3306上连接到它。但是,每当我尝试从使用docker-compose运行的go应用程序连接到数据库时,都会出现以下错误:
dial tcp 127.0.0.1:3306: connect: connection refused
这是我的转到代码:
// dbUser, dbPassword, & dbName are all variables that definitely contain the correct values
db, err = sql.Open("mysql", dbUser+":"+dbPassword+"@tcp(localhost:3306)/"+dbName)
if err != nil {
panic(err.Error())
}
defer db.Close()
query, err := db.Query("INSERT INTO test_table(test_field) VALUES(This is a test)")
if err != nil {
panic(err.Error())
}
defer query.Close()
我正在导入:
"database/sql"
_ "github.com/go-sql-driver/mysql"
非常感谢您的帮助。
答案 0 :(得分:2)
您无法从Docker连接到localhost
(尤其是在Mac上,其中Docker在表面下的Linux VM中运行),并且无法访问主机提供的服务。
但是,具有使用特殊主机名docker.for.mac.localhost
通过IP地址访问主机的功能。在没有其他Docker网络问题的情况下,修改您的连接字符串以使用docker.for.mac.localhost:3306
应该可以解决此问题并允许访问主机上的服务。
(有关此替代方法的更多详细信息,请参见Docker docs。)
答案 1 :(得分:2)
您应该这样打开:
db, err := sql.Open("mysql", "root:root@tcp(mysql:3306)/GoLife")
mysql
是docker-compose服务名称。
答案 2 :(得分:1)
我的解决方案最终成为了此页面上答案的组合。我收到错误:
dial tcp 127.0.0.1:3306: connect: connection refused
我的连接是这样构建的:
db, err := sql.Open("mysql", "root:password@/mydbname?parseTime=true")
我阅读了@Cosmic Ossifrage 的内容,但不确定如何实现它,所以我应用了 Vitah 给出的答案。这不起作用,因为 mysql:3306 不是 docker 理解的位置,因此连接失败。然后,我将 @Cosmic Ossifrage 的解决方案与 Vitah 的解决方案一起应用,以获得工作设置。
db, err:= sql.Open("mysql", "root:password@tcp(docker.for.mac.localhost:3306)/mydbname?parseTime=true")
希望这可以帮助任何寻找答案的人!感谢其他贡献者帮助我拼凑起来