ECONNREFUSED for Postgres on nodeJS with dockers
je construis une application fonctionnant sur NodeJS en utilisant postgresql. J'utilise SequelizeJS comme ORM. Pour éviter d'utiliser un vrai démon postgres et d'avoir des nodejs sur mon propre appareil, j'utilise des conteneurs avec docker-compose.
quand je lance docker-compose up
il démarre la base de données pg
database system is ready to accept connections
et le serveur nodejs. mais le serveur ne peut pas se connecter à la base de données.
Error: connect ECONNREFUSED 127.0.01:5432
si j'essaie d'exécuter le serveur sans utiliser de conteneurs (avec des nodejs réels et postgresd sur ma machine) il travail.
mais je veux que cela fonctionne correctement avec les conteneurs. Je ne comprends pas ce que je fais mal.
ici docker-compose.yml
le fichier
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:pgpassword@127.0.0.1:5432/mydatabase
volumes:
- ./:/src
db:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_USER: username
POSTGRES_PASSWORD: pgpassword
quelqu'un Pourrait m'aider s'il vous plaît?
(quelqu'un qui aime docker :) )
1 réponses
DATABASE_URL
se réfère à 127.0.0.1
adaptateur de boucle (plus d' ici). Cela signifie "se connecter à moi-même".
lors de l'exécution des deux applications (sans utiliser Docker) sur le même hôte, elles sont toutes les deux adressables sur le même adaptateur (aussi connu sous le nom de localhost
).
lors de l'exécution des deux applications dans des conteneurs ils ne sont pas tous les deux sur localhost comme avant. Au lieu de cela, vous devez pointer le web
container db
adresse IP du conteneur sur le docker0
carte docker-compose
jeux pour vous.
changement:
DATABASE_URL: postgres://username:pgpassword@127.0.0.1:5432/mydatabase
DATABASE_URL: postgres://username:pgpassword@db:5432/mydatabase
cela fonctionne grâce aux liens Docker: le web
conteneur a un fichier (/etc/hosts
) avec db
entrée pointant vers l'IP que l' db
conteneur est sur. C'est le premier endroit où un système (dans ce cas, le conteneur) regardera en essayant de résoudre les noms d'hôte.