簡體   English   中英

將 docker 服務連接到 docker 數據庫容器時出現 Postgres ENOTFOUND 錯誤

[英]Postgres ENOTFOUND error when connecting docker services to a docker database container

我無法讓我的容器(服務)之一通過 docker 連接到 postgres 數據庫容器。 它似乎在抱怨使用錯誤的數據庫......(我正在使用帶有“pg”和“pg-promise”庫的 node.js。)。

我的 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

所以我最終找到了答案,所以我想我會分享:

Docker 無法自動連接到 Postgres 的原因是 Postgres 仍在初始化(並且在啟動時未收到連接請求)。

我發現的一種解決方案是人為延遲 Docker 的連接嘗試(基本上等到 Postgres 准備好再嘗試連接)。

編輯:Docker-compose 版本 3 現在有關於如何控制哪些容器首先啟動的文檔: https : //docs.docker.com/compose/startup-order/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM