인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

lim3617님의 프로필 이미지

작성한 질문수

따라하며 배우는 도커와 CI환경 [2023.11 업데이트]

Docker Compose 파일 작성하기

docker-compose up 에러 공유 드립니다

작성

·

131

0

  • docker-compose.yml

version: "3.9"
services:
  redis-server: 
    image: 'redis'
    container_name: redis-container
    restart: unless-stopped
    ports:
      - "6379:6379"
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 5

  node-app:
    depends_on:
      redis-server:
        condition: service_healthy
    build:
      context: .
      dockerfile: Dockerfile
    container_name: node-app
    restart: on-failure
    ports:
      - "5000:8080"
    environment:
      - REDIS_URL=redis://redis-server:6379

 

  • server.js

const express = require('express');
const redis = require('redis');

// Redis 클라이언트 생성
const client = redis.createClient({
  url: process.env.REDIS_URL
});

// Redis 연결
(async () => {
  try {
    await client.connect(); // 클라이언트 연결
    console.log('Connected to Redis');
  } catch (err) {
    console.error('Redis connection error:', err);
  }
})();

const app = express();

// 초기값 설정
(async () => {
  try {
    await client.set('number', 0);
  } catch (err) {
    console.error('Failed to initialize Redis key:', err);
  }
})();

app.get('/', async (req, res) => {
  try {
    // Redis 값 읽기 및 증가
    const number = await client.get('number');
    await client.set('number', parseInt(number) + 1);

    res.send(`숫자가 1씩 올라갑니다. ${number}`);
  } catch (err) {
    console.error('Error handling Redis operations:', err);
    res.status(500).send('Server error');
  }
});

app.listen(8080, () => {
  console.log('Server is running on port 8080');
});

 

node는 18버전 레디스 클라이언트 모듈은 4.7.0 입니다

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.
lim3617님, docker-compose up을 실행할 때 발생하는 에러와 관련하여 여러 가지 고려해볼 수 있는 문제와 해결 방법을 안내드리겠습니다.

가능성 있는 문제와 해결 방법

  1. 이미지 빌드 오류 확인:

    • docker-compose up 시 로그를 확인하여 이미지를 빌드하는 과정에서 발생하는 오류가 있는지 먼저 확인해보세요.
  2. 네트워크 문제:

    • REDIS_URL이 잘못 설정되어 있는지 확인하세요. redis://redis-server:6379가 올바른지 docker ps 명령어로 컨테이너들이 제대로 작동 중인지와 네트워크 이름을 확인하세요.
  3. Redis 클라이언트 연결 문제:

    • Redis 클라이언트가 환경 변수를 사용하여 URL에 접근하도록 설정되어 있는지 확인하세요. 실행 전에 REDIS_URL 환경 변수가 제대로 설정되어 있는지 확인해보세요.

아래의 게시물들이 유사한 문제를 다루고 있으니 참고하시면 도움이 될 것입니다:
- compose-up 에러시 실행되지 않는 문제 해결
- node 쪽 에러 해결: redis 및 서비스 연결 문제

또한, 서버 시작과정에서 발생할 수 있는 다양한 원인에 대해 관심을 가져야 합니다. 예를 들어, 초기 Redis 연결시도에서 발생할 수 있는 네트워크 오류와 환경 변수 충돌 및 무효한 서버 포트 설정 등을 점검해야 합니다.

아래 댓글에서 유사한 코드를 제공하였으니 코드를 비교하면서 실행해보시기 바랍니다:
- Redis 경로 및 네트워크 설정 문제 해결

const express = require("express");
const redis = require("redis");

const client = redis.createClient({
  url: "redis://redis-server:6379",
  socket: {
    reconnectStrategy: times => Math.min(times * 50, 500),
  }
});

const app = express();

app.get('/', async (req, res) => {
  await client.connect();
  let number = await client.get('number') || 0;
  
  number = parseInt(number) + 1;
  
  await client.set("number", number);
  res.send(`숫자가 1씩 올라갑니다. 숫자: ${number}`);
  await client.disconnect();
});

app.listen(8080, () => {
  console.log('Server is running on port 8080');
});

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

lim3617님의 프로필 이미지

작성한 질문수

질문하기