我无法让我的一个容器(服务)通过docker连接到postgres数据库容器。似乎在抱怨使用错误的数据库...(我正在将node.js与'pg'和'pg-promise'库一起使用。)
我的postgres连接信息
const pg = require('pg');
const pgp = require('pg-promise')();
var config = {
user: 'root',
password: 'myPassword',
database: 'myDb',
host: 'database',
port: 5432
};
const db = pgp(config);
当docker尝试连接数据库时出错
{ Error: getaddrinfo ENOTFOUND database database:5432
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'database',
host: 'database',
port: 5432 }
我知道默认情况下,容器的主机名与服务名相同,但是不起作用(我的服务名是“数据库”)。我想念什么吗?
docker-compose.yml
version: '3'
services:
myapp:
build: My-App/
depends_on:
- 'database'
ports:
- '5000:5000'
database:
image: postgres:11.5
答案 0 :(得分:0)
所以我最终找到了答案,所以我想分享一下:
Docker无法自动连接到Postgres的原因是因为Postgres仍在初始化(并且在启动时未收到连接请求)。
我发现的一个解决方案是人为地延迟Docker的连接尝试(基本上等到Postgres准备好之后再尝试连接)。