[나만무] nest(socket) 서버 health check failed

Woody Jo·2025년 9월 7일

kjungle

목록 보기
29/31
post-thumbnail

아무것도 하지 않았는데 계속 3001번 health check failed 발생했던 이유


1. tail -f /dev/null

도커 컨테이너에 npm 의존성 파일을 올리면 너무 무거워진다 하여,
이를 뺐다.

그러면 실행했을 때
main.ts 에서 import 하는 reflect-metadata를 찾지 못함.

그래서 강제로

# 백그라운드로 컨테이너 실행 (종료되지 않게)
docker run -d --name temp-container --user root 7dfc31ff6e3e tail -f /dev/null

백그라운드에서 컨테이너를 만드는데 tail -f /dev/null로 생성

tail -f /dev/null
이는 백그라운드에서 실행할 수 있도록 하는 명령어인데, 배포 서버에서는
1. 로그 데이터 손실
2. 프로세스 관리의 비효율성 등으로 인해
사용하지 않는다고 한다.

그래서 socket/Dockerfile.prod

Dockerfile에 직접

RUN npm install reflect-metadata

패키지 설치 명령어 넣고,

# node_modules 복사 (런타임 deps만)
COPY --from=deps /app/node_modules ./node_modules

--from=deps : npm install or yarn install
/app/node_modules : deps 이미지 내에 있는 node_modules 폴더의 경로, 일반적으로 /app 아래에 생성된다.
./node_modules : 복사된 파일이 저장될 목적지 (최종 런타임에 사용될 node_modules 폴더를 생성하고 파일을 붙여넣음)

2. Redis Client Error

드디어 서버가 실행된다.
근데 Redis Client Error?
이미 Redis server 돌아가는데...?

네트워크 문제

Redis serverSocket_default server를 확인해봄

docker inspect socket-socket-1 | grep -A 5 "Networks"


"Networks": {
                "socket_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "socket-socket-1",
docker inspect redis-server | grep -A 5 "Networks"


"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:",

서로 다른 네트워크를 보고 있음.
도대체 왜?

redis-server를 socket_default 네트워크에 연결

docker network connect socket_default redis-server

finally

/rooms, GET} route +1ms
socket-1  | [Nest] 1  - 09/07/2025, 9:30:13 AM     LOG [RoutesResolver] HealthController {/health}: +0ms
socket-1  | [Nest] 1  - 09/07/2025, 9:30:13 AM     LOG [RouterExplorer] Mapped {/health, GET} route +0ms
socket-1  | 🔴 Redis connected
socket-1  | [Nest] 1  - 09/07/2025, 9:30:14 AM     LOG [NestApplication] Nest application successfully started +276ms
socket-1  | ✅ Socket server is running on port 3001

마지막으로 이렇게 연결이 잘되었고,

health check succeeded 됨.

되게 간단하게 해결한 것처럼 보이지만?
일요일 오전 11시쯤에 나와....6시 30반까지
꽤나 오랜 시간 붙잡고 있었다.

사실 해결 못할줄 알았는데,
우여곡절 끝에 원인을 찾고 해결할 수 있어서 다행이다 :)

profile
developer

1개의 댓글

comment-user-thumbnail
2025년 9월 7일

😀

답글 달기