ECONNREFUSED在nodeJS上使用docker的Postgres

ECONNREFUSED在nodeJS上使用docker的Postgres

问题描述:

我正在使用postgresql构建在NodeJS上运行的应用程序。 我使用SequelizeJS作为ORM。 为了避免使用真正的postgres守护进程并在我自己的设备上使用nodejs,我使用了docker-compose的容器。ECONNREFUSED在nodeJS上使用docker的Postgres

当我运行docker-compose up 它启动PG数据库

database system is ready to accept connections 

和服务器的NodeJS。 但服务器无法连接到数据库。

Error: connect ECONNREFUSED 127.0.01:5432 

如果我尝试不使用容器(与真正的和的NodeJS我的机器上postgresd)运行服务器它的工作原理。

但我希望它与容​​器一起正常工作。我不明白我做错了什么。

这里是docker-compose.yml文件

web: 
    image: node 
    command: npm start 
    ports: 
    - "8000:4242" 
    links: 
    - db 
    working_dir: /src 
    environment: 
    SEQ_DB: mydatabase 
    SEQ_USER: username 
    SEQ_PW: pgpassword 
    PORT: 4242 
    DATABASE_URL: postgres://username:[email protected]:5432/mydatabase 
    volumes: 
    - ./:/src 
db: 
    image: postgres 
    ports: 
    - "5432:5432" 
    environment: 
    POSTGRES_USER: username 
    POSTGRES_PASSWORD: pgpassword 

有人能帮助我吗?

(有人谁喜欢搬运工:))

+0

这篇文章提到“boot2docker ip”命令,在这里似乎有用吗? https://www.andreagrandi.it/2015/02/21/how-to-create-a-docker-image-for-postgresql-and-persist-data/ –

+0

似乎有什么区别,你的主机操作系统你在 –

DATABASE_URL127.0.0.1,这是loopback adapter(更多here)。这意味着“连接到我自己”。

在同一主机上运行这两个应用程序(不使用Docker)时,它们都可在同一个适配器(也称为localhost)上寻址。

当两个应用程序在容器中运行时,它们都不像以前一样位于本地主机上。相反,您需要将web容器指向docker0适配器上的db容器的IP地址 - 其中docker-compose为您设置。

变化:

DATABASE_URL: postgres://username:[email protected]:5432/mydatabase 

DATABASE_URL: postgres://username:[email protected]:5432/mydatabase 

这个工程由于码头工人链接:在web容器有一个文件(/etc/hosts)与db条目指向IP的db容器上。这是系统(在这种情况下,容器)尝试解析主机名时的第一个地方。

+2

谢谢安迪,这是我正在寻求。祝你今天愉快 ! – Stainz42

+0

我是一个noob /初学者与postgres /节点。我到底需要做什么改变? – nerdess

+0

@nerdess'DATABASE_URL'在问题的'docker-compose.yml'中 - 这就是需要改变的地方。你可以在你的应用程序代码中用'process.env ['DATABASE_URL']'引用它。 – Andy