Backend/Trouble Shooting

[FastAPI 에러 해결] ERR_EMPTY_RESPONSE in Docker Container

sangwonYoon 2023. 6. 4. 21:15

실행 환경

  • OS: MacOS
  • FastAPI: 0.96.0 버전

 

문제 상황

로컬에서 정상적으로 작동하는 FastAPI 애플리케이션을 Docker 이미지로 빌드한 뒤, 컨테이너로 실행시켰더니 ERR_EMPTY_RESPONSE 메세지를 출력하며 아무런 응답을 보내지 않음

# Dockerfile

FROM python:3.10

RUN python3 -m pip install --upgrade pip

COPY ./requirements.txt /ws/requirements.txt

WORKDIR /ws

RUN pip install -r requirements.txt

COPY ./webapp/ /ws

CMD ["uvicorn", "main:app"]


문제 해결

uvicorn을 실행할 때 --host 옵션이 있는데, 이 옵션은 소켓을 바인딩 할 호스트를 지정하는 옵션이다. 기본값이 127.0.0.1이기 때문에 이 옵션을 생략할 경우 FastAPI 애플리케이션은 로컬에서만 접근이 가능해진다. 왜냐하면 127.0.0.1은 localhost 주소이므로 외부와 통신할 수 없기 때문이다. 따라서 로컬에서 실행할 때는 --host 옵션을 주지 않아도 애플리케이션에 접근이 가능했지만, 컨테이너에서 애플리케이션이 실행될 경우 컨테이너 외부에서는 애플리케이션에 접근할 수 없는 것이다.

외부에서 애플리케이션에 접근을 가능하게 하려면 --host 0.0.0.0 옵션을 줘야한다.

따라서 아래와 같이 Dockerfile을 수정하여 문제를 해결했다.

# Dockerfile

FROM python:3.10

RUN python3 -m pip install --upgrade pip

COPY ./requirements.txt /ws/requirements.txt

WORKDIR /ws

RUN pip install -r requirements.txt

COPY ./webapp/ /ws

CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]