Docker-compose не хочет собирать контейнер из-за ошибки

У меня выдаёт ошибку при подключении к БД

failed to initialize database, got error failed to connect to `host=localhost user=ilya database=gin_web`: dial error (dial tcp [::1]:5432: connect: cannot assign requested address)

Помогите её решить пж, нигде не нашёл ответ, пыталься менять DB_HOST с localhost на db ничего не работало, я понять не могу как эту ошибку решить.

Вот весь мой код

.env

PORT=3000
DB_HOST=localhost
DB_PORT=5432
DB_USER=ilya
DB_PASSWORD=newpass
DB_NAME=gin_web

dockerfile

FROM golang:latest

WORKDIR /usr/src/app

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


COPY . .

RUN go mod tidy

docker-compose.yml

version: '3.8'

services:
  go-app:
   build: .
   env_file:
     - .env
   ports:
     - "3000:3000"
   volumes:
     - .:/usr/src/app
   command: air ./cmd/main.go -b 0.0.0.0
 db:
   image: postgres:alpine
   environment:
    - POSTGRES_HOST=${DB_HOST}
    - POSTGRES_PORT=${DB_PORT}
    - POSTGRES_USER=${DB_USER}
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_DB=${DB_NAME}
   ports:
    - "5432:5432"
   volumes:
    - postgres-db:/var/lib/postgresql/data

volumes:
   postgres-db:

database.go

package database

import (
  "fmt"
  "log"
  "os"

  "gorm.io/driver/postgres"
  "gorm.io/gorm"
)

var DB *gorm.DB

func DBConnection() {
  var err error
  host := os.Getenv("DB_HOST")
  port := os.Getenv("DB_PORT")
  user := os.Getenv("DB_USER")
  password := os.Getenv("DB_PASSWORD")
  dbname := os.Getenv("DB_NAME")

  dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable", host, user, password, dbname, port)
  DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})

  if err != nil {
    log.Fatal("Error loading .env file")
  } else {
     fmt.Print("Successfully connect to database")
  }
}

В main.go файле всё подключено так же как и .env файл там же подключён


Ответы (0 шт):