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

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

我有mysql社区服务器安装在我的mac上,它是设置和工作,我可以连接到它localhost:3306 using navicat for mysql。但是,每当我尝试从使用docker compose运行的go应用程序连接到数据库时,都会出现以下错误:

  1. dial tcp 127.0.0.1:3306: connect: connection refused

这是我的密码:

  1. // dbUser, dbPassword, & dbName are all variables that definitely contain the correct values
  2. db, err = sql.Open("mysql", dbUser+":"+dbPassword+"@tcp(localhost:3306)/"+dbName)
  3. if err != nil {
  4. panic(err.Error())
  5. }
  6. defer db.Close()
  7. query, err := db.Query("INSERT INTO test_table(test_field) VALUES(This is a test)")
  8. if err != nil {
  9. panic(err.Error())
  10. }
  11. defer query.Close()

我正在导入:

  1. "database/sql"
  2. _ "github.com/go-sql-driver/mysql"

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

zhte4eai

zhte4eai1#

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

  1. dial tcp 127.0.0.1:3306: connect: connection refused

我的联系是这样构建的:

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

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

  1. 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#

你应该这样打开:

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

相关问题