docker 拨号tcp [::1]:5432:connectex:无法建立连接,因为目标计算机主动拒绝了它

uplii1fm  于 2022-12-22  发布在  Docker
关注(0)|答案(1)|浏览(605)

我在Windows上用Postgres编写一个Go Web应用程序,我使用pq包连接到Postgres。
这是我的数据库连接函数

func ConnToDB() *sql.DB {
   // load .env file
   err := godotenv.Load(".env")
   if err != nil {
      log.Fatalf("Error loading .env file")
   }

   // Open the connection
   db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))
   if err != nil {
      panic(err)
   }

   // check the connection
   err = db.Ping()
   if err != nil {
      panic(err)
   }

   fmt.Println("Successfully connected!")
   // return the connection
   return db
}

我的.env变量

DATABASE_URL="postgres://postgres:pgpwd4me@localhost:5432/test?sslmode=disable"

但是当我运行这段代码时

ERROR   2022/12/18 00:23:22 server.go:3228: http: panic serving [::1]:62981: dial tcp [::1]:5432: connectex: No connection could be made because the target machine actively refused it.

ScreenshotDocker Screenshot

oxf4rvwz

oxf4rvwz1#

我整理了一个小代码样本来帮助您解决问题。首先,我使用以下命令通过Docker运行Postgres:

docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres

多亏了这个命令,每个试图在端口5432上联系我的主机的连接都将被自动转发到我的容器的端口5432
源代码或多或少与您共享的相同:

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/lib/pq"
)

func main() {
    conn, err := sql.Open("postgres", "host=localhost user=postgres password=postgres dbname=postgres port=5432 sslmode=disable")
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    if err := conn.Ping(); err != nil {
        panic(err)
    }

    fmt.Println("Successfully connected!")
}

我能够成功地联系我的Postgres示例,所以这应该也适用于你。让我知道!

相关问题