【问题标题】:panic: dial tcp 127.0.0.1:3306: connect: connection refused恐慌:拨打 tcp 127.0.0.1:3306:连接:连接被拒绝
【发布时间】:2019-12-25 05:21:54
【问题描述】:

我正在尝试使用 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 没有在 localhost 中运行,或者至少没有监听 TCP 端口 3306,其他也没有。

标签: mysql docker tcp docker-compose go-gorm


【解决方案1】:

您应该改为通过容器名称进行连接

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
}

【讨论】:

  • 谢谢!!我解决我的问题!!为什么使用通过 container_name 连接?
  • 因为 docker composer 使用 docker 网络。这允许您通过容器的名称作为网络别名 docs.docker.com/compose/networking 进行连接
猜你喜欢
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2018-12-26
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2020-12-31
相关资源
最近更新 更多