postgresql - 无法连接到 docker 容器内的 postgresql

标签 postgresql go docker docker-compose

我正在编写一个 go 应用程序,它在 2 个容器中进行了 dockerized:db 和 app。

启动容器“docker-compose up”时,我看到消息:dial tcp: lookup dbpgsql on 127.0.0.11:53: no such host

DB_ENV_DB=cldb
DB_ENV_USER=cldb
DB_ENV_PASS=cldb
DB_PORT_5432_TCP_ADDR=dbpgsql
DB_PORT_5432_TCP_PORT=5432

这是我的 docker-compose.yml

version: '2'
services:
  server:
    hostname: app
    image: golang:1.7.3-alpine
    build: ./server/
    privileged: true
    container_name: server
    command: go run server.go
    volumes:
      - ../src/:/go/src/
      - ../server.go:/go/server.go
    links:
      - db:db
    ports:
     - '8080:8080'
   env_file: environment

 db:
   hostname: dbpgsql
   image: postgres:latest
   container_name: db
   environment:
      POSTGRES_USER: cldb
      POSTGRES_PASSWORD: cldb
      POSTGRES_DB: cldb
    ports:
      - '5432:5432'
   volumes:
     - ./data:/docker-entrypoint-initdb.d

当执行 DB.Ping() 时应用程序在这里失败:

func InitDB(dataSourceName string) {
    var err error
    DB, err = sql.Open("postgres", dataSourceName)
    if err != nil {
       log.Panic(err)
    }

    if err = DB.Ping(); err != nil {
       log.Panic(err)
    }

    DB.SetMaxIdleConns(100)
}

最佳答案

您可以使用服务名称(或链接选项中给出的别名)连接到数据库,在您的例子中是 db。 Hostname 选项设置容器知道自己的主机名。但它不会出现在 docker ps 中,也不会出现在任何其他容器的/etc/hosts 文件中。 ( https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/ )

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

相关文章:

GOPATH 和 Go Web 服务器 : 'go run myserver.go'

postgresql - 如何在 PostgreSQL 数据库中创建内容

适用于 Mac 的 Docker : Host network and port publishing

docker - 构建失败但 Gitlab 中的工作状态为成功

mongodb - 使用 := gives unused error but using = don't in Go

ruby-on-rails - fields_for 中的数组列字段呈现...未呈现

MySQL 外部数据包装器 : use SSH parameters for SSL connection?

使用 pg_dump 创建的普通 .sql 文件的 PostgreSQL search_path 问题

node.js - MongoDB 和 Nodejs 与 Docker "MongoTimeoutError: Server selection timed out after 30000 ms"

sql - 为什么其中一个查询运行得如此缓慢?