dousi1970
2016-12-19 14:18 阅读 775

无法连接到Docker容器内的postgresql

I'm writing a go app which is dockerized in 2 containers: db and app.

while starting containers 'docker-compose up' I see the message: 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

here is my 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

The app fails here when DB.Ping() is executed:

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)
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    douduan5073 douduan5073 2016-12-19 14:30

    You can connect to database with the service name (or alias name given in links options), in your case it's db. Hostname option sets the hostname by which the container knows itself. But it will not appear in docker ps nor in the /etc/hosts file of any other container. (https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/)

    点赞 评论 复制链接分享

相关推荐