Home > Enterprise >  Why does my Redis container refused connection to localhost port?
Why does my Redis container refused connection to localhost port?

Time:09-02

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.

  • Related