Fastify서버 Docker 실행 시 접속 문제
본문 바로가기
DevOps 부트캠프/Docker

Fastify서버 Docker 실행 시 접속 문제

by liveloper jay 2022. 3. 31.

Summary

 프로젝트 진행 중 최초 fastify 서버를 docker를 이용하여 실행시키고자 하였습니다.

// fastify의 server.js
// Require the framework and instantiate it
const fastify = require('fastify')({ logger: true })

// Declare a route
fastify.get('/', async (request, reply) => {
  return { hello: 'world' }
})

server.listen(3000, (err, address) => {
  if (err) {
    console.error(err);
    process.exit(1);
  }
  console.log(`Server listening at ${address}`);
});

 

 

#Dockerfile 작성

FROM node:16
WORKDIR /usr/src/app
COPY package*.json ./

RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "server.js" ]

 

 

// 이미지 빌드
sudo docker build -t test_server .

// 컨테이너 생성& 실행
sudo docker run -d -p 3000:3000 test_server


이 과정을 모두 마친 후 localhost:3000 또는 127.0.0.1:3000 을 통해 접속해 보았으나 접속이 되지 않는 문제가 발생하였습니다.

 

 

 

해결방법

 해당 문제에 대한 검색을 통해 localhost로 접속이 되지 않을 경우 host를 0.0.0.0 으로 지정해주면 정상적으로 접속이 된다는 내용을 참고하여 코드를 다음과 같이 수정하였습니다.

// Require the framework and instantiate it
const fastify = require('fastify')({ logger: true })

// Declare a route
fastify.get('/', async (request, reply) => {
  return { hello: 'world' }
})

fastify.listen({ host: "0.0.0.0", port: 3000 }, (err, address) => {
  if (err) {
    console.error(err);
    process.exit(1);
  }
  console.log(`Server listening at ${address}`);
});


이후 다시 접속을 시도해보니 정상적으로 접속되는 것을 확인할 수 있었습니다.



그런데 이 0.0.0.0 이라는 IP 주소가 어떤 의미를 가지고 있는 것인지를 검색해보니
'유효하지 않거나 알 수 없는 대상을 설명하는 라우팅 할 수 없는 주소' 라고 합니다. 즉 0.0.0.0을 이용하면 연결되어있는 모든 ipv4 주소로 접근할 수 있다는 것을 의미합니다. 이 주소를 저렇게 적용시켜서 사용해도 되는지 잘은 모르겠으나, 일단 이 방식으로 해결했습니다.


댓글