Docker Golang杜松子酒Postgres

时间:2019-12-23 17:27:30

标签: postgresql docker go docker-compose go-gin

我正在尝试使用Postgres为golang应用程序设置一个docker。 如果我删除/评论Postgres,则go应用程序在容器中可以正常工作。同样,我能够启动Postgres容器并登录到它。我能够做码头工人组成。 但是当我进行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'


2 个答案:

答案 0 :(得分:0)

@Oras端口提到,似乎有些端口需要暴露:5432:5432仅添加它即可将端口从问题中排除,也从您遇到的错误中排除,看来您的docker应用容器取决于数据库容器,因此您需要有一种方法等待数据库容器启动并且您的应用容器可以连接它,检查depends_on的docker 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. depends_on在启动Web之前不会等待db和redis处于“就绪”状态-仅在它们启动之前。如果您需要等待服务准备就绪,请参阅控制启动顺序以获取有关此问题的更多信息以及解决方案。

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

  4.   
  5. 以群集模式(版本3的Compose文件)部署集群时,将忽略depends_on选项。

  6.   

并且基于上述注意事项,您可能仍然会遇到问题,但是重新启动策略将重新启动应用程序容器,并且您将连接到数据库。

答案 1 :(得分:0)

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

很抱歉。