gorm:dial tcp 127.0.0.1:5432:connect:连接被拒绝

a11xaf1n  于 2023-05-11  发布在  Go
关注(0)|答案(1)|浏览(5767)

我正在尝试使用gorm连接到由以下docker配置创建的数据库:

services:
  app:
    build: 
      context: .
      # Correct the path to your Dockerfile
      dockerfile: Dockerfile
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - .:/app
    networks:
      - backend
    depends_on:
      - db
  
  db:
    container_name: simple_api_db_user
    restart: always
    image: postgres:latest
    environment:
      POSTGRES_USER: mateen
      POSTGRES_PASSWORD: password
      POSTGRES_DB: simple_api_db_user
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - backend
    ports:
      - "127.0.0.1:5430:5430"
  
volumes:
  db_data:

networks:
  backend:
    driver: bridge

下面是我在golang中的postgres连接代码:

func NewPostgresConnection() (*gorm.DB, error) {
    psqlConfig, err := dbConfigs.NewPostgresqlConfig()
    if err != nil {
        return nil, err
    }

    db, err := sql.Open("postgres", psqlConfig.Dsn())
    if err != nil {
        log.Println("DB Connection error : ", err.Error())
        return nil, err
    }

    if err := db.Ping(); err != nil {
        log.Println("DB Ping error: ", err.Error())
        return nil, err
    }

    gdb, err := gorm.Open(postgres.Open(psqlConfig.Dsn()), &gorm.Config{})
    if err != nil {
        return nil, err
    }

    err = Migrate(gdb)
    if err != nil {
        return nil, err
    }

    return gdb, nil
}

这是我打印出来的配置DSN:&{host=simple_api_db_user user=mateen password=password dbname=simple_api_db_user port=5430 sslmode=disable TimeZone=UTC}
我在运行应用程序时收到以下错误:

simple-api-user-app-1  | 2023/05/10 14:05:16 DB Ping error:  dial tcp 172.31.0.2:5430: connect: connection refused
simple-api-user-app-1  | 2023/05/10 14:05:16 dial tcp 172.31.0.2:5430: connect: connection refused

这是我的Dockerfile,尽管我认为它可能无关紧要:

# Builder
FROM golang:latest

WORKDIR /app

COPY go.mod go.sum ./

RUN go mod download

RUN go install github.com/cosmtrek/air@latest

COPY . .

CMD [ "air" ]

EXPOSE 8080

**PS:**在dbeaver中尝试连接postgres端口到5430时,出现以下错误:

The connection attempt failed.
  EOFException
  java.io.EOFException

编辑:改变

hc8w905p

hc8w905p1#

postgres容器正在侦听5432。因此ports选项应设置为5430:5432。这将主机上的端口5430Map到docker容器上的5432

相关问题