Olá, equipe e comunidade Alura, nas duas últimas semanas estou tentando subir uma aplicação backend de node + postgres com docker-compose, mas estou recebendo diversos erros, alguns eu consegui resolver, mas tem um que eu não estou conseguindo de jeito nenhum.
Error: connect ECONNREFUSED 127.0.0.1:5432 (esse é o bendito erro)
Vou compartilhar alguns trechos de código como docker-compose, datasource e o Dockerfile usado para construir a imagem.
Arquivo docker-compose.yml
version: "3.9"
networks:
backend-network:
driver: bridge
volumes:
data:
services:
backend:
image: <minha-imagem-do-docker-hub>
networks:
- backend-network
depends_on:
- postgres
environment:
SECRET: ${SECRET}
DB_HOST: ${POSTGRES_HOST}
DB_USER: ${POSTGRES_USER}
DB_PASSWORD: ${POSTGRES_PASSWORD}
DB_NAME: ${POSTGRES_DB}
DB_PORT: ${POSTGRES_PORT}
ports:
- "${SERVER_PORT}:${SERVER_PORT}"
postgres:
image: postgres
networks:
- backend-network
volumes:
- data:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
ports:
- "${POSTGRES_PORT}:${POSTGRES_PORT}"
Arquivo Dockerfile para construir a imagem
FROM node:16
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
CMD ["npm", "start"]
Arquivo datasource para typeorm
const AppDataSource = new DataSource({
type: "postgres",
host: process.env.POSTGRES_HOST,
port: Number(process.env.POSTGRES_PORT),
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB,
entities: [`${entPath}/*`],
synchronize: true,
});
Vi algumas pessoas usando AppDataSource.manager e na minha aplicação eu não fiz isso, não sei se isso é um problema.
O mais estranho é que quando eu rodo a aplicação com os scripst do package.json daplicação com npm tudo funciona normalmente, nesse caso o nome do host precisa ser (localhost) para funcionar. Por favor, preciso de ajuda pra sair logo dessa task, já tem mto tempo que eu to preso nisso hahahah.
Vou compartilhar também esse erro, estou utilizando a porta padrão mesmo, acho que não tem problema compartilhar essa informação, dado que esse não será o ambiente final da aplicação.
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1278:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 5432
}
Valeu galera, conto com vcs todos para resolver esse problema e desde já agradeço a colaboração de todos.
Abraço, Thales.