docker-compose up:连接被拒绝127.0.0.1:5432

问题描述 投票:0回答:1

ecom 服务没有运行,不知道幕后发生了什么。 为什么此服务在其他服务正在运行时没有侦听数据库服务。同时我已经设置了 DB_HOST=db 但仍然无法连接,该服务发生了什么。为什么?

错误:拨号 tcp 127.0.0.1:5432:连接:连接被拒绝

我在这里使用sqlx


package database

import (
    "fmt"
    "log"
    "os"

    "ecommerce/database/models"

    "github.com/jmoiron/sqlx"
    _ "github.com/lib/pq"
)

func MakeDbConnection() *sqlx.DB {
    url := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable", os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_NAME"))
    db, err := sqlx.Connect("postgres", url)
    if err != nil {
        log.Fatal(err)
    }

    // transaction
    tx := db.MustBegin()
    tx.MustExec(models.Schema)
    tx.Commit()

    db.SetConnMaxIdleTime(5) 
    
    db.SetMaxOpenConns(5) //
    fmt.Println("connection to database was successfull")
    return db
}

我的本地 .env 文件

DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=*****
DB_NAME=ecom
DB_HOSt=db

我的 Dockerfile


FROM golang:1.22-alpine

WORKDIR /app

COPY go.mod ./
COPY go.sum ./

RUN go mod download
RUN apk --no-cache add postgresql-client

COPY . .

RUN go build -o main .
EXPOSE 4000


ENV DB_HOST=db
ENV DB_PORT=5432
ENV DB_USER=user
ENV DB_PASSWORD=password
ENV DB_NAME=ecom


CMD ["./main"]


我的 docker 撰写文件

version: "3"
services:
  db:
    image: postgres:latest
    restart: always
    ports:
      - 5432:5432
    container_name: db
    network_mode: bridge
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=ecom
    volumes:
      - db-data:/var/lib/postgresql/data
  pgadmin:
    image: chorss/docker-pgadmin4
    container_name: pgAdmin
    depends_on:
      - db
    network_mode: bridge
    ports:
      - 5050:5050
  ecom_api:
    build: .
    container_name: ecom_api
    network_mode: bridge
    restart: always
    environment:
      - DB_HOST=db
      - DB_PORT=5432
      - DB_USER=user
      - DB_PASSWORD=password
      - DB_NAME=ecom
    volumes:
      - .env:/user/src/app/.env
    depends_on:
      - db
    ports:
      - "4000:4000"

    command: go run main.go
volumes:
  db-data:

docker go docker-compose
1个回答
0
投票

github.com/lib/pq 在连接字符串中接受 PGHOSThost

您也没有设置,所以它使用默认的

localhost
。您应该将
host=db
添加到您的连接字符串(不是 URL)。

© www.soinside.com 2019 - 2024. All rights reserved.