【问题标题】:Loopback Postgres in Docker-compose environmentDocker-compose 环境中的 Loopback Postgres
【发布时间】:2018-05-08 10:11:00
【问题描述】:

首先我为我糟糕的英语道歉:)

我已经绑定到使用 docker-compose 设置一个环境,其中包含一个环回 API、一个 PostgreSQL 数据库和几个其他服务。

在这里你可以看到 docker-compose.yml

version: "2.1"
services:
  postgresql:
    image: postgres:9.6
    restart: always
    environment:
      - "COMPOSE_HTTP_TIMEOUT=200000"
      - "POSTGRES_USER=root"
      - "POSTGRES_PASSWORD=root"
      - "POSTGRES_DB=hh"
  backend:
    image: tyrex/backend
    restart: always
    stdin_open: true
    tty: true
    environment:
      - "API_BASE_PATH=/api"
      - "HOST_NAME=haaye-henricus.de"
      - "PORT=3000"
      - "DATABASE_HOST=postgresql"
      - "DATABASE_PORT=5432"
      - "DATABASE_NAME=hh"
      - "DATABASE_USER=root"
      - "DATABASE_PASSWORD=root"
      - "DEBUG_DATABASE_CONNECTOR=true"
    ports:
      - "3000:3000"
    command: ["./wait-for-it.sh", "postgresql:5432", "--", "node", "."]

这里可以看到datasources.local.js

  // Copyright IBM Corp. 2014,2015. All Rights Reserved.
  // Node module: loopback-example-offline-sync
  // This file is licensed under the MIT License.
  // License text available at https://opensource.org/licenses/MIT

  'use strict';

  var DATABASE_HOST = process.env.DATABASE_HOST || 'localhost';
  var DATABASE_USER = process.env.DATABASE_USER || 'root';
  var DATABASE_PASSWORD = process.env.DATABASE_PASSWORD || 'root';
  var DATABASE_PORT = process.env.DATABASE_PORT || '5432';
  var DATABASE_NAME = process.env.DATABASE_NAME || 'hh';
  var DEBUG_DATABASE_CONNECTOR = process.env.DEBUG_DATABASE_CONNECTOR || false;
  var FILES_DIRECTORY = process.env.FILES_DIRECTORY || './storage';

  console.log('Database Url', 'postgresql://' + DATABASE_USER + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST +  ':' + DATABASE_PORT  + '/' + DATABASE_NAME);

  console.log('New Build');

  module.exports = {
    'db': {
      'name': 'db',
      'connector': 'memory',
    },
    'postgresql': {
      'url': 'postgresql://' + DATABASE_USER + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST +  ':' + DATABASE_PORT  + '/' + DATABASE_NAME,
      'debug': DEBUG_DATABASE_CONNECTOR,
      'name': 'postgresql',
      'connector': 'postgresql',
    },
    'files_datasource': {
      'name': 'files_datasource',
      'connector': 'loopback-component-storage',
      'provider': 'filesystem',
      'root': FILES_DIRECTORY,
      'nameConflict': 'makeUnique',
    },
  };

当我尝试运行 docker-compose up 时,我会得到以下输出

events.js:163
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRNOTAVAIL 54.201.47.166:5432
    at Object.exports._errnoException (util.js:1050:11)
    at exports._exceptionWithHostPort (util.js:1073:20)
    at Server.setupListenHandle [as _listen2] (net.js:1243:19)
    at listenInCluster (net.js:1307:12)
    at doListen (net.js:1432:7)
    at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:62:16)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:78:10)

我已进入容器并向“postgresql”发送 ping,导致 0% 数据包丢失 但是 ping 54.201.47.166 会导致 100% 的数据包丢失

搜索整个 www 没有结果:(

谁能帮帮我

【问题讨论】:

  • "postgresql" 指向哪个ip?做 nslookup 你会得到 ip 并改变 js 文件中的 process.env.DATABASE_HOST=postgresql
  • 谢谢。如果这样做了。现在我得到Error: connect ECONNREFUSED 172.19.0.4:5432
  • ok 表示它连接到 postgres docker,对 pg_hba.conf 和 postgresql.conf 进行更改,并在 yml 中为 postgres 提供端口。按照这个连接来自主机&container stackoverflow.com/questions/47423173/…的postgres

标签: node.js postgresql docker docker-compose loopbackjs


【解决方案1】:

尝试使用container_name: postgresql 为postgres 服务提供一个容器名称,然后ping postgresql 服务而不是应用程序容器中的容器IP。确保DATABASE_HOSTcontainer_name 匹配。示例 MEAN 应用程序 docker-compose 文件 here.

【讨论】:

  • 感谢您的回答 :) 我在 BackendContainer 上执行了一个 bash,我 ping 了 postgres,丢包率为 0%。但是 Loopback 没有使用正确的 ip。Loopback 正在查询 54.201.47.166。如果我执行 nslookup postgress 我得到 172.19.0.4。所以总而言之,postgresscontainer 可以从 BackendContainer 访问,但是 backendcontainer 使用了错误的 ip。
  • 通过IP连接容器有点繁琐,改用嵌入式DNS吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 2017-07-27
  • 2015-01-12
  • 2021-05-16
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多