无法使用go and docker连接到mysql服务器-拨号tcp 127.0.0.1:3306:连接:连接被拒绝

kmbjn2e3  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(1571)

我有mysql社区服务器安装在我的mac上,它是设置和工作,我可以连接到它localhost:3306 using navicat for mysql。但是,每当我尝试从使用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"

任何帮助都将不胜感激,谢谢。

zhte4eai

zhte4eai1#

我的解决办法是把这一页上的答案结合起来。我收到错误:

dial tcp 127.0.0.1:3306: connect: connection refused

我的联系是这样构建的:

db, err := sql.Open("mysql",  "root:password@/mydbname?parseTime=true")

我读了@cosmic ossifrage的文章,但不知道如何实现它,所以我应用了vita给出的答案。这不起作用,因为mysql:3306 was docker无法理解该位置,因此连接失败。然后我用@cosmic ossifrage的解决方案和vita的解决方案得到一个工作设置。

db, err:= sql.Open("mysql", "root:password@tcp(docker.for.mac.localhost:3306)/mydbname?parseTime=true")

希望这有助于任何人寻找答案!感谢其他贡献者帮助我把它拼凑起来

rpppsulh

rpppsulh2#

你无法连接到 localhost 从docker(特别是在mac上,docker运行在linux虚拟机的底层),并期望访问主机提供的服务。
但是,可以使用特殊主机名通过ip地址访问主机 docker.for.mac.localhost . 没有任何其他docker网络问题,请修改您的连接字符串以使用 docker.for.mac.localhost:3306 应解决此问题并允许访问主机上的服务。
(docker文档中提供了有关此解决方法的更多详细信息。)

rkue9o1l

rkue9o1l3#

你应该这样打开:

db, err := sql.Open("mysql", "root:root@tcp(mysql:3306)/GoLife")
``` `mysql` 是docker compose服务名称。

相关问题