인프런 커뮤니티 질문&답변
docker-compose up 에러 공유 드립니다
작성
·
221
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 인턴입니다.
lim3617님, docker-compose up을 실행할 때 발생하는 에러와 관련하여 여러 가지 고려해볼 수 있는 문제와 해결 방법을 안내드리겠습니다.
가능성 있는 문제와 해결 방법
이미지 빌드 오류 확인:
docker-compose up시 로그를 확인하여 이미지를 빌드하는 과정에서 발생하는 오류가 있는지 먼저 확인해보세요.
네트워크 문제:
REDIS_URL이 잘못 설정되어 있는지 확인하세요.redis://redis-server:6379가 올바른지docker ps명령어로 컨테이너들이 제대로 작동 중인지와 네트워크 이름을 확인하세요.
Redis 클라이언트 연결 문제:
- Redis 클라이언트가 환경 변수를 사용하여 URL에 접근하도록 설정되어 있는지 확인하세요. 실행 전에 
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');
});
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




