docker-compose up 시 오류
2772
1 asked
다른 질문도 참고해보았지만 도저히 해결이 안되네요
아래는 오류 로그입니다.
ui-MacBookAir docker-compose-app % docker-compose up
[+] Running 2/0
⠿ Container docker-compose-app-node-app-1 Created 0.0s
⠿ Container docker-compose-app-redis-server-1 Recreated 0.0s
Attaching to docker-compose-app-node-app-1, docker-compose-app-redis-server-1
docker-compose-app-redis-server-1 | 1:C 04 Mar 2023 11:43:49.189 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
docker-compose-app-redis-server-1 | 1:C 04 Mar 2023 11:43:49.189 # Redis version=7.0.9, bits=64, commit=00000000, modified=0, pid=1, just started
docker-compose-app-redis-server-1 | 1:C 04 Mar 2023 11:43:49.189 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
docker-compose-app-redis-server-1 | 1:M 04 Mar 2023 11:43:49.189 * monotonic clock: POSIX clock_gettime
docker-compose-app-redis-server-1 | 1:M 04 Mar 2023 11:43:49.190 * Running mode=standalone, port=6379.
docker-compose-app-redis-server-1 | 1:M 04 Mar 2023 11:43:49.190 # Server initialized
docker-compose-app-redis-server-1 | 1:M 04 Mar 2023 11:43:49.192 * Ready to accept connections
docker-compose-app-node-app-1 | server is running
docker-compose-app-node-app-1 | events.js:174
docker-compose-app-node-app-1 | throw er; // Unhandled 'error' event
docker-compose-app-node-app-1 | ^
docker-compose-app-node-app-1 |
docker-compose-app-node-app-1 | Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
docker-compose-app-node-app-1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
docker-compose-app-node-app-1 | Emitted 'error' event at:
docker-compose-app-node-app-1 | at RedisClient.on_error (/usr/src/app/node_modules/redis/index.js:341:14)
docker-compose-app-node-app-1 | at Socket.<anonymous> (/usr/src/app/node_modules/redis/index.js:222:14)
docker-compose-app-node-app-1 | at Socket.emit (events.js:198:13)
docker-compose-app-node-app-1 | at emitErrorNT (internal/streams/destroy.js:91:8)
docker-compose-app-node-app-1 | at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
docker-compose-app-node-app-1 | at process._tickCallback (internal/process/next_tick.js:63:19)
docker-compose-app-node-app-1 exited with code 1
^CGracefully stopping... (press Ctrl+C again to f
나머지는 소스 파일입니다.
version: "3"
services:
redis-server:
image: "redis"
node-app:
build: .
ports:
- "8080:8080"FROM node
WORKDIR /usr/src/app
COPY ./ ./
RUN npm install
CMD ["node", "server.js"]{
"name": "docker-compose-app",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"express": "4.17.1",
"redis": "3.0.2"
},
"author": "",
"license": "ISC"
}
const express = require("express");
const redis = require("redis");
// 레디스 클라이언트 생성
const client = redis.createClient({
socket: {
host: "redis-server",
port: 6379
}
});
const app = express();
app.get("/", async (req, res) => {
await client.connect();
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);
await client.disconnect();
});
app.listen(8080);
console.log("server is running");강의 진도를 나갈 수가 없어서 답답합니다.
혹시 해결하신분들은 있으신가요..
Answer 7
3
노드의 버전 때문일 확률이 높습니다.
제가 테스트 해본 결과
docker-compose up 명령은 yml파일에 "build ."과 같이 명시해주더라도,
매번 새롭게 이미지를 빌드하는 것이 아니라 이미 동일한 이름의 이미지가 있으면 업데이트를 하지 않고 그대로 이미지를 가져다 쓰는 것 같습니다.
그래서 저의 경우는 기존 도커 파일에
"RUN node:10" 부분을 "RUN node:18"로 수정 후
이미지 빌드를 따로 해준 뒤
"docker-compose up"을 실행하니 정상적으로 서버가 동작했습니다.
같은 상황이 아닐 수 있겠지만
한번 시도해보시는 것을 추천드립니다
교수님께서 수업 마지막에
docker-compose up --build를 통해
이미지를 재빌드 하면서 컴포즈를 실행시키는 모습을 보여주시는 것을 보았습니다.
노드 버전 수정 후, 이 방법을 사용해도 좋을 것 같습니다 ㅎㅎ
2
저는 아래 방법으로 해결하였습니다.
공식 문서에 따르면 Redis 3 버전은 Promise를 지원하지 않는다고 하네요. 따라서 util 라이브러리를 이용하여 문제를 해결해야합니다. (dependencies util 추가)
Node Redis currently doesn't natively support promises (this is coming in v4), however you can wrap the methods you want to use with promises using the built-in Node.js
util.promisifymethod on Node.js >= v8;
const { promisify } = require("util");
const getAsync = promisify(client.get).bind(client);
getAsync.then(console.log).catch(console.error);
const express = require("express");
const redis = require("redis");
const { promisify } = require("util");
//레디스 클라이언트 생성
const client = redis.createClient({
host: "redis-server",
port: 6379
});
const getAsync = promisify(client.get).bind(client);
const setAsync = promisify(client.set).bind(client);
client.on('error',err => console.log('Redis Client Error',err));
const app = express();
app.get('/',async (req,res) => {
let number = await getAsync('number');
if (number === null) {
number = 0;
}
res.send("숫자가 1씩 올라갑니다. 숫자: " + (parseInt(number)));
await setAsync('number', (parseInt(number) + 1))
})
app.listen(8080);
console.log('Server is running');
1
나도 포기;;;
싸다고 들엇는데 생각보다 다뤄지지 않은 오류가 너무 많네요.
끽해봐야 OS 몇개 안되는것도 그렇고
3년이면 노드 버전이 몇인데 아직도 이거 리뉴얼을 안하다니 좀 너무하다는 생각도 듭니다.
0
현재 작동되는 코드 입니다.
docker-compose.yml
version: '3'
services:
redis-server:
image: redis
container_name: redis-container
restart: unless-stopped
expose:
- 6379
node-app:
depends_on:
- redis-server
build:
context: .
dockerfile: Dockerfile
container_name: node-app
restart: on-failure
ports:
- "8787:8787"server.js
const express = require('express');
const redis = require('redis');
// 레디스 클라이언트 생성
const client = redis.createClient({
socket: {
host: "redis-server",
port: 6379
}
});
const app = express();
app.get('/', async (req, res) => {
await client.connect();
let number = await client.get("number");
if (number === null) {
number = 0;
}
console.log('Number: ' + number)
res.send("숫자가 1씩 올라갑니다. 숫자 : " + number)
// 현재 숫자를 가져온 후 1씩 증가시킨다.
await client.set("number", parseInt(number) + 1);
await client.disconnect();
})
app.listen(8787);
console.log('server on!');
package.json
{
"name": "docker-compose-app",
"version": "1.0.0",
"description": "",
"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"
}
Dockerfile
FROM node
WORKDIR /usr/src/app
COPY ./ ./
RUN npm install
CMD [ "node", "server.js" ]
0
저는 노드 버전 16으로 바꿔서 빌드하고 실행하니 돌아가긴 합니다... (OS는 윈도우 입니다!)
혹시 도움이 되실까 해서 코드 남깁니다.
server.js
이전 강의 강사님께서 남기신 코드 복붙
const express = require("express");
const redis = require("redis");
//레디스 클라이언트 생성
const client = redis.createClient({
socket: {
host: "redis-server",
port: 6379
}
});
const app = express();
app.get('/', async (req, res) => {
await client.connect();
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)
await client.disconnect();;;
})
app.listen(8080);
console.log('Server is running');
package.json
여기서 nodemon 모듈은 필요 없습니다.
{
"name": "nodejs-app-example",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"express": "4.18.2",
"nodemon": "^3.0.3",
"redis": "4.6.12"
},
"author": "",
"license": "ISC"
}
Dockerfile
노드 버전 16으로 정한 이유는 딱히 없습니다.
# 베이스 이미지 -> node version 16
FROM node:16
# 워킹 디렉토리 설정
WORKDIR /usr/src/app
COPY package.json ./
# 종속성 설치
RUN npm install
COPY ./ ./
# node 서버를 실행시키는 명령어
CMD ["node", "server.js"]
docker-compose.yml
강사님과 다르게 이미 빌드된 도커 이미지 yml 파일에 명시해주었습니다.
(위 도커 파일 사용해서 빌드)
version: '3'
services:
redis-server:
image: 'redis'
node-app:
image: 'joykim93/docker-compose-node-demo'
ports:
- '8080:8080'
Docker Containers간 통신 할 때 나타나는 에러 강의 질문
0
78
1
WINDOW + Vite를 사용하여 소스 코드 변경이 반영되지 않는 현상
0
77
1
도커 컨테이너 끼리 SSL 통신 시 문제가 생깁니다..
0
213
1
도표 강의 자료 사용이 불가합니다. (권한 문제)
0
133
1
Docker compose 관련 공유
0
138
1
트레비스가 유료화가 되어 테스트가 어려워 챕터8에서 고민중입니다.
0
77
1
강사님 혹시 vscode 어떤 테마 쓰시나요..?
0
283
1
The instance profile aws-elasticbeanstalk-ec2-role associated with the environment does not exist.
0
104
1
travis ci가 이제 유료화가 된 것 같습니다;;;
0
208
2
docker-compose up 에러 공유 드립니다
0
290
1
Elastic Beanstalk에서 도메인 클릭시 react 이미지가 안나오고 다른 화면이 나오는데
0
167
1
도커 빌드 시간이 너무 오래걸려요..
0
1049
2
docker-compose down 이후에도 containers에 redis가 남아 있는 이유
0
163
1
도커 볼륨이 작동이 안되는것 같아서 질문드립니다!
0
209
2
docker-compose 가 Docker Desktop 에서 빠진건가요? command not found 라고 뜨네요
0
276
1
Error response from daemon: The system cannot find the file specified.
0
217
1
draw.io 오류
0
642
1
Docker Volume 오류(reference, lowercase)
0
563
1
[섹션3 - 내가 만든 이미지 기억하기 쉬운 이름 주기] 네이밍/태그 에러
0
223
1
axios오류 문의드립니다!
0
332
1
node.js version
0
482
1
안녕하세요 마지막 강의 질문 있습니다.
0
429
1
Deploy를 계속 실패합니다.
3
1377
4
TravisCI에서 계속 에러가 납니다....
0
350
1

