我正在嘗試使用 Postgres 為 golang 應用程序設置一個 docker。如果我刪除/注釋 Postgres,go 應用程序在容器中可以正常工作。同樣,我可以啟動 Postgres 容器并登錄它。我能夠進行 docker-compose up 。但是當我進行 API 調用時,例如:localhost:3000/api/admin/users. 它給出了錯誤:error: { "error": "+dial tcp 127.0.0.1:5432: connect: connection refused" }Postgres連接字符串是這樣的:connStr := fmt.Sprintf("host=postgres user=anurag password=anu_12345 dbname=bankingapp sslmode=disable")db, err := sql.Open("postgres", connStr)DockerfileFROM golang:1.13WORKDIR /go/src/banking-appCOPY . .RUN go get -d -v ./...RUN go install -v ./...CMD ["go" , "run", "main.go"]docker-compose.ymlversion: '3'services: web: build: . ports: - "3000:3000" postgres: image: "postgres" environment: POSTGRES_USER: 'anurag' POSTGRES_PASSWORD: 'anu_12345' POSTGRES_DB: 'bankingapp'
2 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
似乎有一些缺少的端口被公開:5432:5432
只需添加它即可從問題中排除端口,也從您遇到的錯誤中排除,似乎您的 docker 應用程序容器依賴于數據庫容器,因此您需要一種等待數據庫容器啟動并且應用程序容器可以連接它的方法,檢查depends_on
docker compose:
version:?'3'services:web: ??build:?. ??ports: ????-?"3000:3000" ??depends_on: ????postgres ??restart_policy: ????condition:?on-failure ??postgres: ????image:?"postgres" ????ports: ??????-?"3000:3000" ????environment: ??????POSTGRES_USER:?'anurag' ??????POSTGRES_PASSWORD:?'anu_12345' ??????POSTGRES_DB:?'bankingapp'
使用depends_on時需要注意以下幾點:
depends_on 在啟動 web 之前不會等待 db 和 redis 準備好 - 直到它們啟動。如果您需要等待服務準備就緒,請參閱控制啟動順序以了解有關此問題的更多信息以及解決該問題的策略。
版本3不再支持depends_on的條件形式。
使用版本 3 Compose 文件以 swarm 模式部署堆棧時,將忽略 dependent_on 選項。
根據上述說明,您可能仍然面臨問題,但重新啟動策略將重新啟動應用程序容器,并且您將連接到數據庫。
- 2 回答
- 0 關注
- 182 瀏覽
添加回答
舉報
0/150
提交
取消