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

Docker golang 杜松子酒 postgres

Docker golang 杜松子酒 postgres

Go
BIG阳 2023-08-14 16:38:13
我正在尝试使用 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_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时需要注意以下几点:

  1. depends_on 在启动 web 之前不会等待 db 和 redis 准备好 - 直到它们启动。如果您需要等待服务准备就绪,请参阅控制启动顺序以了解有关此问题的更多信息以及解决该问题的策略。

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

  3. 使用版本 3 Compose 文件以 swarm 模式部署堆栈时,将忽略 dependent_on 选项。

根据上述说明,您可能仍然面临问题,但重新启动策略将重新启动应用程序容器,并且您将连接到数据库。


查看完整回答
反对 回复 2023-08-14
?
慕村225694

TA贡献1880条经验 获得超4个赞

我找到了答案。只需要重建映像或使用挂载加载即可。代码没有刷新。



查看完整回答
反对 回复 2023-08-14
  • 2 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信