2015-10-26 15 views
16

Sto costruendo un'app in esecuzione su NodeJS utilizzando postgresql. Sto usando SequelizeJS come ORM. Per evitare di utilizzare il demone di Postgres reale e di avere nodejs sul mio dispositivo, sto usando container con docker-compose.ECONNREFUSED per Postgres su nodoJS con finestre mobili

quando lo eseguo docker-compose up Si parte il database pg

database system is ready to accept connections 

e il server nodejs. ma il server non può connettersi al database.

Error: connect ECONNREFUSED 127.0.01:5432 

Se provo a fare funzionare il server senza utilizzare contenitori (con nodejs reali e postgresd sulla mia macchina) che funziona.

Ma voglio che funzioni correttamente con i contenitori. Non capisco cosa sto sbagliando.

qui è il file 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 

qualcuno potrebbe aiutarmi per favore?

(una persona che ama finestra mobile :))

+0

questo articolo menziona il comando "boot2docker ip", sembra utile qui? https://www.andreagrandi.it/2015/02/21/how-to-create-a-docker-image-for-postgresql-and-persist-data/ –

+0

sembra fare la differenza su quale sistema operativo host tu sono il –

risposta

25

vostro DATABASE_URL si riferisce a 127.0.0.1, che è il loopback adapter (più here). Questo significa "connettiti a me stesso".

Quando si eseguono entrambe le applicazioni (senza utilizzare Docker) sullo stesso host, sono entrambi indirizzabili sullo stesso adattatore (noto anche come localhost).

Quando si eseguono entrambe le applicazioni in contenitori, non sono entrambi su localhost come prima. Invece è necessario puntare il contenitore web sull'indirizzo IP del contenitore db sull'adattatore, che è il set docker-compose per te.

Cambio:

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

a

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

Questo funziona grazie ai collegamenti Docker: il contenitore web dispone di un file (/etc/hosts) con una db entrata che punta al IP che il contenitore db è sopra. Questo è il primo posto in cui un sistema (in questo caso, il contenitore) cercherà di risolvere i nomi degli host.

+2

Grazie Andy, quello cercavo. Buona giornata ! – Stainz42

+0

sono un noob/principiante con postgres/nodo. dove esattamente devo fare il cambiamento? – nerdess

+0

@nerdess 'DATABASE_URL' è nella' docker-compose.yml' della domanda - questo è ciò che deve cambiare. Fai riferimento al codice dell'applicazione con 'process.env ['DATABASE_URL']'. – Andy

Problemi correlati