我正在编写一个go应用程序,这个应用程序停靠在2个容器中:db和app。
启动容器'docker-compose up'时我看到消息:在127.0.0.11:53上拨打tcp:lookup dbpgsql:没有这样的主机
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
这是我的docker-compose.yml
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.Ping()时,应用程序失败:
{{1}}
答案 0 :(得分:2)
您可以使用服务名称(或链接选项中给出的别名)连接到数据库,在您的情况下是db
。 Hostname选项设置容器知道自己的主机名。但它不会出现在docker ps中,也不会出现在任何其他容器的/ etc / hosts文件中。 (https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/)
答案 1 :(得分:0)
就我而言,我在 post-gres 服务中使用了 container_name
,这就是在应用程序中连接到数据库时需要设置为主机名的内容