작성
·
29
0
강의 내용 똑같이 따라해봐도 redis, node 버전 관련 문제로 실행할 수 없었습니다..!
저는 아래 코드로 테스트 성공했으니 참고 부탁드려요!
Dockerfile
>>>> node version 16
FROM node:16
WORKDIR /usr/src/app
COPY ./ ./
RUN npm install
CMD [ "node", "server.js" ]
package.json
>>> redis version 4.7.0
{
"name": "nodejs-docker-compose-app",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"start": "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"express": "4.17.1",
"redis": "4.7.0"
},
"author": "",
"license": "ISC",
"description": ""
}
docker-compose.yml
version: "3"
services:
redis-server:
image: redis
container_name: redis-server
restart: unless-stopped
expose:
- 6379
node-app:
depends_on:
- redis-server
build:
context: .
dockerfile: Dockerfile
container_name: node-app
restart: on-failure
ports:
- "8081:8080"
server.js
const express = require("express");
const redis = require("redis");
const app = express();
// Redis 클라이언트 생성
const client = redis.createClient({
socket: {
host: "redis-server",
port: 6379
}
});
async function connectToRedis() {
let connected = false;
while (!connected) {
try {
await client.connect();
console.log('Connected to Redis');
connected = true;
} catch (error) {
console.error('Error connecting to Redis:', error);
console.log('Retrying in 2 seconds...');
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
}
// Express 엔드포인트 설정
app.get('/', async (req, res) => {
try {
let number = await client.get('number');
if (number === null) {
number = 0;
}
console.log('Number: ' + number);
res.send("숫자가 1씩 올라갑니다. 숫자: " + number);
await client.set("number", parseInt(number) + 1);
} catch (error) {
console.error('Error:', error);
res.status(500).send('Redis 연결 오류');
}
});
// 서버 시작 전에 Redis 연결
app.listen(8080, async () => {
await connectToRedis(); // 서버 시작 시 Redis 연결 시도
console.log('Server is running on port 8080');
});
모두 저장 후 터미널에서
docker compose down
docker compose up --build
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. yerincho94님.
도커와 CI 환경에서 발생하는 버전 문제로 인해 실행이 어려우셨군요. 주신 코드로 문제를 해결하셨다니 다행입니다. 특히, Node.js 버전을 16으로 설정하고 Redis 버전을 4.7.0로 사용하는 것이 주요 변경사항으로 보입니다. 이러한 버전 설정은 호환성 문제 해결에 매우 중요합니다.
Docker Compose 설정에서도 redis-server
라는 컨테이너 이름을 사용하고, node-app
에서는 Redis 서버에 대한 연결 설정을 정확히 하셨습니다. server.js 코드에서 Redis에 연결을 시도하며, 연결 실패 시 다시 시도하는 부분이 인상적입니다. 이는 네트워크 지연 등의 문제에서 안정성을 제공합니다.
혹시 더 많은 정보를 얻고 싶으시다면 Docker compose 에러 해결에서 유사한 문제 해결에 대한 설명을 찾아보실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.