Reputation: 793
I have a Node.js app and have set up docker-compose. I'm trying to use Postgres DB in the container.
Here is 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:
I have the containers running successfully and even database connected, but I get this error when making a DB request
"stack": {
"code": "ECONNREFUSED",
"errno": "ECONNREFUSED",
"syscall": "connect",
"address": "127.0.0.1",
"port": 5432
}
Upvotes: 4
Views: 1993
Reputation: 1
For those, you use more recent structure project with a config file like below:
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'
}
};
You can specify the service name of your postgres database
in your .env
file. And it should be good for you.
// .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
Upvotes: 0
Reputation: 4731
If you connect to the database from another docker container, use the service name in the connection string(db
in your case). From the error message it seems that there is something wrong with your configuration. It tries to connect to localhost (127.0.0.1
)
Upvotes: 3