为了账号安全,请及时绑定邮箱和手机立即绑定

Docker golang gin postgres

Docker golang gin postgres

Go
POPMUISE 2022-04-26 14:58:49
我正在尝试使用 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"]码头工人-compose.ymlversion: '3'services:  web:    build: .    ports:      - "3000:3000"  postgres:    image: "postgres"    environment:      POSTGRES_USER: 'anurag'      POSTGRES_PASSWORD: 'anu_12345'      POSTGRES_DB: 'bankingapp'
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

我找到了答案。只需要使用 mount 重建图像或加载。代码未刷新。

抱歉打扰。


查看完整回答
反对 回复 2022-04-26
?
大话西游666

TA贡献1817条经验 获得超14个赞

正如@Oras 端口所提到的,似乎有一些缺少的端口要暴露:5432:5432只需将其添加到从问题中排除端口,也从您遇到的错误中排除,您的 docker 应用程序容器似乎依赖于数据库容器,因此您需要拥有一种等到您的数据库容器启动并且您的应用程序容器可以连接它的方法,检查depends_ondocker compose:

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 选项。

并且基于上述说明,您可能仍然会遇到问题,但重启策略将重启应用程序容器,您将连接到数据库。


查看完整回答
反对 回复 2022-04-26
  • 2 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号