【问题标题】:Unable to use Postgres DB in docker-compose - ECONNREFUSED无法在 docker-compose 中使用 Postgres DB - ECONNREFUSED
【发布时间】:2018-11-21 16:53:55
【问题描述】:

我有一个 Node.js 应用程序并设置了 docker-compose。我正在尝试在容器中使用 Postgres DB。

这里是 docker-compose

version: "3"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    links:
      - redis
      - db
  angular: # image of nginx
    image: "qp-angular-nginx"
    ports:
      - "4200:80" # specify port forewarding

  redis:
    image: "redis:3"
    ports:
     - "6379:6379"     
  db:
    image: "postgres:9.6"
    ports:
     - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    volumes:
         - pgdata:/var/lib/postgresql/data         
  dbadmin:
    image: "myimage/phppgadmin"
    ports:
         - "8085:80"
    environment:
        POSTGRES_HOST: db
        POSTGRES_PORT: 5432
volumes: 
     pgdata:

我已经成功运行容器,甚至连接了数据库,但是在发出数据库请求时出现此错误

 "stack": {
        "code": "ECONNREFUSED",
        "errno": "ECONNREFUSED",
        "syscall": "connect",
        "address": "127.0.0.1",
        "port": 5432
    }

【问题讨论】:

标签: node.js postgresql docker


【解决方案1】:

对于这些,您可以使用具有如下配置文件的更新的结构项目:

require('dotenv').config();

module.exports = {
    development: {
        username: process.env.DB_USER,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        host: process.env.APP_URL_DOCKER,
        dialect: 'postgres'
    },
    test: {
        username: process.env.DB_USER,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        host: process.env.APP_URL_DOCKER,
        dialect: 'postgres'
    },
    production: {
        username: process.env.DB_USER,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        host: process.env.APP_URL_DOCKER,
        dialect: 'postgres'
    }
};

您可以在.env文件中指定postgres database 的服务名称。它应该对你有好处。

// .env file
APP_URL_LOCAL=127.0.0.1
APP_URL_DOCKER=db # database service name
APP_PORT=8000
APP_KEY=6dd63668dab9a309c7c59a2982126a43b064816925a40b9680d16e2665f41b676a87dae4d506712e6332479c82827993059ddefb607b65caa3534b66b20253ed

DB_USER=postgres
DB_PASSWORD=db_password
DB_NAME=db_name
DB_PORT_CONTAINER=5432
DB_PORT_LOCAL=5433

【讨论】:

    【解决方案2】:

    如果您从另一个 docker 容器连接到数据库,请在连接字符串中使用服务名称(在您的情况下为db)。从错误消息来看,您的配置似乎有问题。它尝试连接到 localhost (127.0.0.1)

    【讨论】:

    • 我已将主机设置为 db,这是我的 docker-compose 文件中的服务名称
    猜你喜欢
    • 2020-02-03
    • 2018-01-16
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多