![](/img/trans.png)
[英]docker-compose postgres dial error (dial tcp 172.23.0.3: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.