恐慌:拨号tcp 127.0.0.1:3306:连接被拒绝

5

我正在尝试使用golang gin gorm从docker连接mysql服务器。

构建本身已成功,但如标题所示,发出了以下错误。

最初的回答:

panic: dial tcp 127.0.0.1:3306: connect: connection refused

最初的回答:尝试以这种方式连接。

尝试以这种方式连接。

func dbConnect() *gorm.DB {
    db, err := gorm.Open("mysql", "docker:password@/godocker")

    if err != nil {
        panic(err.Error())
    }

    return db
}

  • docker-compose.yml
db:
    image: mysql:5.7.26
    environment:
      MYSQL_USER: docker
      MYSQL_ROOT_PASSWORD: password
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: godocker
    ports:
      - "3306:3306"

运行docker-compose ps命令的结果


      Name                   Command             State                 Ports
------------------------------------------------------------------------------------------
gin-docker_api_1   /bin/sh -c gin -i run         Up      0.0.0.0:3001->3001/tcp
gin-docker_db_1    docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp, 33060/tcp

谢谢


MySQL没有在本地主机上运行,或者至少没有监听TCP端口3306,也没有其他任何东西。 - user207421
1个回答

11
您应该通过容器名称连接而不是ip地址。
db:
  image: mysql:5.7.26
  container_name: godockerDB
  environment:
    MYSQL_USER: docker
    MYSQL_ROOT_PASSWORD: password
    MYSQL_PASSWORD: password
    MYSQL_DATABASE: godocker
  ports:
    - "3306:3306"

然后,您可以通过容器名称进行连接。

func dbConnect() *gorm.DB {
db, err := gorm.Open("mysql", "docker:password@tcp(godockerDB)/godocker")

if err != nil {
    panic(err.Error())
}

    return db
}

我解决了我的问题!为什么要使用容器名称连接? - jadejoe
因为 Docker Compose 使用 Docker 网络,这允许你通过容器的名称作为网络别名进行连接。https://docs.docker.com/compose/networking/ - Truong Dang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接