[Solved] " ClientClosedError: The client is closed Error " with Node.js

‍정진철·2023년 4월 12일
0

Docker Compose

도커 컴포즈에 redis 를 띄우는데 계속 그림과 같은 오류 발생,,

기존에는 이미지 빌드 후 단일 컨테이너만 띄어서 docker.host.internal로 처리했는데 도커 컴포즈는 일종의 컨테이너들끼리 합주를 해주는 역할이라 redis와 같이 각각의 컨테이너를 띄어서 사용하려면 로컬로 연결하는 것이 아닌
해당 컨테이너에게 부여된 IP 주소를 부여해야 한다.

도커 컨테이너는 독립적인 private 네트워크 IP를 소유하고 있기에 localhost로 지정 시 내 컴퓨터의 서버를 가리키게 된다.

따라서 Docker Compose로 구성된 컨테이너들은 동일한 네트워크 IP 영역을 사용하기에 컨테이너들끼리 사용하는 네트워크 IP를 입력해주면 compose 안에 속한 컨테이너들 간에 자유롭게 소통이 가능하다.

ref : https://github.com/luin/ioredis/issues/763

docker-compose.yml

version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile : Dockerfile
    ports:
      - 3000:3000
    volumes:
      - .:/src
    depends_on:
      - mysql-server
  
  mysql-server:
    image: mysql:8.0

    restart : always

    environment:
      - MYSQL_DATABASE=<디비명>
      - MYSQL_ROOT_PASSWORD=<비밀번호>
    ports:
      - '3306:3306'
  redis:
    image: redis:latest
    container_name : redis
    ports:
      - "6379:6379"
    restart : always

Solution

export const redisClient =  redis.createClient({
 host: 'redis',
 port: 6379,
});

따라서 다음과 같이 기존에는 127.0.0.1 의 로컬로 연결을 해줬다면 이제는 레디스 서버로 연결을 시켜준다.


마치며,,

근데 reference로 참고한 곳에서는 host명은 "redis-server"로 해줘서 해결했다는데 나는 오히려 redis-server로는 해결이 안되고 단순히 redis로 호스트를 맞추니깐 연결이 됬다.. 이건 왜그런지 더 봐야겠다.


ref :https://github.com/luin/ioredis/issues/763

profile
WILL is ALL

0개의 댓글