제목이 간단하게 작성되지 못하는데는 이유가 있다. 현상이 매우 독특했기 때문이다. 우선 서버 코드부터 살펴보자.
import fastify from "fastify";
const server = fastify();
server.get("/ping", async (request, reply) => {
return "pong\n";
});
server.listen(8080, (err, address) => {
if (err) {
console.error(err);
process.exit(1);
}
console.log(`Server listening at ${address}`);
});
너무나도 간단한 fastify
서버 코드이다. 마지막 listen
함수에서 볼 수 있듯이 8080
포트에 바인딩 되어 있고, GET /ping
하면, pong
을 돌려주는 간단한 API가 한개 있다.
이를 도커 이미지로 빌드 한 후, 컨테이너를 실행하자 다음과 같은 현상이 발생했다.
curl localhost:8080/ping
하면, curl: (52) Empty reply from server
이라고 응답한다.curl localhost:8080/ping
하면, 정상적으로 pong
을 반환한다.❯ lsof -i :8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 13539 byron1st 63u IPv6 0xaa8afebd03b2829f 0t0 TCP *:http-alt (LISTEN)
위의 listen
함수에 첫번째 파라미터로 포트 넘버 값만을 주는데, 해당 부분을 아래와 같이 고친다.
server.listen({ host: "0.0.0.0", port: 8080 }, (err, address) => {
...
}
해결책의 이유에 대해서는 Docker: cannot open port 8080 질문글 답변의 일부를 옮김으로 대신한다.
...i assume it's just listening on the internal docker ip (172...) try listening on 0.0.0.0 to see if it works
지금껏 서버를 실행 시킬 때 한번도 호스트 값을 주어본 적이 없는데, 이런 문제가 생길 수 있다는 것을 알았다. 😅
감사합니다 덕분에 헤맸는데 문제 해결했어요 ㅋㅋ