When I run docker-compose -f docker-compose.yaml up
my containers for Nestjs, Redis and Postgres all run however at the end I get this error
api_1 | Error: connect ECONNREFUSED 127.0.0.1:6379
api_1 | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16)
This is my first time using Docker outside of any courses and I'm very stuck. I've been following the instructions from this source:
https://www.tomray.dev/nestjs-docker-compose-postgres#add-postgres-to-docker-compose
How do I get my Redis container to stop refusing the connection?
Dockerfile
FROM node:18-alpine As development
# Create app directory
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure copying both package.json AND package-lock.json (when available).
# Copying this first prevents re-running npm install on every code change.
COPY --chown=node:node package*.json ./
# Install app dependencies using the `npm ci` command instead of `npm install`
RUN npm ci
# Bundle app source
COPY --chown=node:node . .
# Use the node user from the image (instead of the root user)
USER node
docker-compose.yaml
services:
api:
build:
dockerfile: Dockerfile
context: .
# Only will build development stage from our dockerfile
target: development
env_file:
- .env
volumes:
- .:/usr/src/app
# Run in dev Mode: npm run start:dev
command: npm run start:dev
ports:
- 3000:3000
depends_on:
- redis
- postgres
redis: # Name of container
image: redis
ports:
- 6379:6379
volumes:
- redis:/data
postgres:
image: postgres
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- '5432:5432'
volumes:
- docker-nest-postgres:/var/lib/postgresql/data
volumes:
docker-nest-postgres:
redis:
driver: local
CodePudding user response:
localhost
from one of your containers will target the container itself, not your host machine.
Your end target is the Redis service, you should replace localhost
with its name: redis
. Docker provides such hostnames within its own networks from its embedded DNS server.