猿问

Docker golang 杜松子酒 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)


Dockerfile


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'


BIG阳
浏览 141回答 2
2回答

慕哥6287543

似乎有一些缺少的端口被公开:5432:5432只需添加它即可从问题中排除端口,也从您遇到的错误中排除,似乎您的 docker 应用程序容器依赖于数据库容器,因此您需要一种等待数据库容器启动并且应用程序容器可以连接它的方法,检查depends_ondocker 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 选项。根据上述说明,您可能仍然面临问题,但重新启动策略将重新启动应用程序容器,并且您将连接到数据库。

慕村225694

我找到了答案。只需要重建映像或使用挂载加载即可。代码没有刷新。
随时随地看视频慕课网APP

相关分类

Go
我要回答