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