我正在尝试使用 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 关注
- 134 浏览
添加回答
举报
0/150
提交
取消