postgresql - 无法在容器之间建立连接

标签 postgresql go docker-compose

我在这里包含了代码.. https://github.com/vinceyoumans/achal

问题:docker compose 文件中的两个容器。一个是标准的 Postgress 容器。第二个是 goLang Scratch 容器。当 postgres 连接失败时,GoLang main.go 文件会崩溃。你可以在github上看到代码。

错误是:

dial tcp: lookup postgres on 127.0.0.11:53: no such host

请求: 查看 main.go 和 dockercompose 文件,看看这个网络出了什么问题……我错过了什么。

main.go

db, err := gorm.Open("postgres", "host='postgres' port=5432 user=docker dbname='docker' password='password'")

if err != nil {
    fmt.Println("============   exiting ==========")
    fmt.Println(err)
    panic("failed to connect database e")
    //  the error i get... dial tcp: lookup postgres on 127.0.0.11:53: no such host
    // panic("failed to connect database: " + err)
}

docker-compose.yml

version: '3.6'
services:
  postgre:
    image: postgres:11.1-alpine
    ports:
      - '5432:5432'
    #network_mode: bridge
    #container_name: postgres
 
    environment:
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'password'
      POSTGRESS_DB: 'db_amex01'
    volumes:
      - ./init:/docker-entrypoint-initdb.d/

  todo:
    build: ./go_amex/
    # ports:
    #   - "8000:8080"

# sudo docker-compose -f docker-compose.yml up

#  HELP:  how would I add the goLang service from this point?

最佳答案

您的撰写文件中有错字。为服务名称自动配置 DNS 别名,并为您的项目创建默认的 docker 网络。因此,所需要的只是连接到服务名称,在您的情况下是“postgre”而不是“postgres”。要解决此问题,请尝试使用此撰写文件:

version: '3.6'
services:
  postgres:
    image: postgres:11.1-alpine
    ports:
      - '5432:5432'
    environment:
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'password'
      POSTGRESS_DB: 'db_amex01'
    volumes:
      - ./init:/docker-entrypoint-initdb.d/

  todo:
    build: ./go_amex/
    # ports:
    #   - "8000:8080"

有关撰写文件网络的更多详细信息,请参阅:https://docs.docker.com/compose/networking/

请注意,您可能会看到的下一个错误是连接被拒绝。 Compose 将同时启动两个容器,您的应用程序可能会在数据库完成启动之前运行。要解决这个问题,您需要在应用程序代码中使用重试循环,在重试之间有一个短暂的延迟,以及超时或重试限制。

关于postgresql - 无法在容器之间建立连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53735948/

相关文章:

sql - 如何有效地选择所有重复项

golang x509.MarshalPKIXPublicKey 与 x509.MarshalPKCS1PublicKey()

mongodb - 如何在docker-compose中运行具有不同端口的多个MongoDB?

docker - .Net Core和Docker(管理应用程序设置)

mysql - Docker Compose Sql DB 图像连接错误

sql - 如何使用postgreSQL初始化多个sql文件

Postgresql 9.3 - array_agg 挑战

java - HQL、PostgreSQL : Not in clause not working, 语法错误)

google-app-engine - 您可以将 App Engine 套接字包用于 websockets 吗?

go - 在 Golang 中使用库