簡體   English   中英

Golang + postgres + docker: 撥打 tcp 172.18.0.2:5432: connect: connection refused

[英]Golang + postgres + docker: Dial tcp 172.18.0.2:5432: connect: connection refused

我正在嘗試從我的 golang 應用程序和 postgres 數據庫中創建一個 docker-compose。 這是數據庫初始化的代碼:

db, err := repository.NewPostgresDB(repository.Config{
        Host:     os.Getenv("DB_HOST"),
        Port:     viper.GetString("db.port"),
        Username: viper.GetString("db.username"),
        DBName:   viper.GetString("db.dbname"),
        SSLMode:  viper.GetString("db.sslmode"),
        Password: os.Getenv("DB_PASSWORD"),
    })

我從 .env 獲取主機名和密碼:

DB_PASSWORD=qwerty
DB_HOST=db

和來自.configs:

port: "8000"

db:
  username: "postgres"
  port: "5432"
  dbname: "postgres"
  sslmode: "disable"

我猜 Docker 文件不有趣:

FROM golang:1.19-buster

RUN go version
ENV GOPATH=/

COPY ./ ./

# install psql
RUN apt-get update
RUN apt-get -y install postgresql-client


# build go app
RUN go mod download
RUN go build -o balance-app ./cmd/main.go

CMD ["./balance-app"]

Docker-compose 也有環保說明:

version: '3.8'

services:
  balance-app:
    build: ./
    command: ./balance-app
    ports:
      - 8000:8000
    depends_on:
      - db
    environment:
      - DB_PASSWORD=qwerty
      - DB_HOST=db


  db:
    restart: always
    image: postgres:latest
    volumes:
      - ./.database/postgres/data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=qwerty
    ports:
      - 5432
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U postgres" ]
      interval: 3s

我嘗試更改端口,嘗試將主機更改為本地主機,就像它在我的 linux 上工作一樣,沒有 docker 撰寫(但 docker 將 postgres 設置為 172...),但它總是出現相同的錯誤。 如果有人能幫助我,我會很高興,謝謝

balance-app 不等待數據庫。 您可能應該查看https://docs.docker.com/compose/startup-order/並在 balance-app 部分使用 condition: service_healthy。

version: '3.8'
services:
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - 5432:5432
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U postgres" ]
      interval: 3s
  balance-app:
    ...
    depends_on:
      db:
        condition: service_healthy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM