簡體   English   中英

Docker golang gin postgres

[英]Docker golang gin postgres

我正在嘗試使用 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)

文件

FROM golang:1.13


WORKDIR /go/src/banking-app
COPY . .

RUN go get -d -v ./...
RUN go install -v ./...

CMD ["go" , "run", "main.go"]


docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"
  postgres:
    image: "postgres"
    environment:
      POSTGRES_USER: 'anurag'
      POSTGRES_PASSWORD: 'anu_12345'
      POSTGRES_DB: 'bankingapp'


似乎是@Oras 端口提到的一些缺少的端口要公開: 5432:5432只需添加它以從問題中排除端口,也從您遇到的錯誤中排除端口,似乎您的 docker 應用程序容器依賴於數據庫容器,因此您需要有一種方法來等待您的數據庫容器啟動並且您的應用程序容器可以連接它,檢查depends_on compose 的depends_on

https://docs.docker.com/compose/compose-file/

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時需要注意以下幾點:

  1. 在啟動 web 之前,depends_on 不會等待 db 和 redis “准備好” - 只在它們啟動之前。 如果您需要等待服務准備就緒,請參閱控制啟動順序以了解有關此問題的更多信息以及解決該問題的策略。

  2. 版本 3 不再支持depends_on 的條件形式。

  3. 在使用版本 3 Compose 文件以 swarm 模式部署堆棧時,將忽略depends_on 選項。

並且根據上面的說明,您可能仍然會遇到問題,但重啟策略將重啟應用程序容器,您將連接到數據庫。

我找到了答案。 只需要重建鏡像或使用 mount 加載。 代碼沒有刷新。

抱歉打擾。

暫無
暫無

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

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