我正在编写一个 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/