将Docker服务连接到Docker数据库容器时发生Postgres ENOTFOUND错误

时间:2019-09-06 03:17:32

标签: postgresql docker docker-compose dockerfile

我无法让我的一个容器(服务)通过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

1 个答案:

答案 0 :(得分:0)

所以我最终找到了答案,所以我想分享一下:

Docker无法自动连接到Postgres的原因是因为Postgres仍在初始化(并且在启动时未收到连接请求)。

我发现的一个解决方案是人为地延迟Docker的连接尝试(基本上等到Postgres准备好之后再尝试连接)。