Docker: localhost 접속이 안되는 문제 해결 방법

ZEDY·2025년 1월 7일
0

docker

목록 보기
1/2

5000포트 사용 중 에러 해결

Apple Mac M3
나는 애플 유저여서 5000포트가 Airplay가 이미 사용하고 있어서 기존 돌리려고 했던 포트인 5000을 사용하지 못했다.

docker run -p 5000:5000 --env-file .env backend-chat-service

이 명령어를 실행하면

docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:5000 -> 0.0.0.0:0: listen tcp 0.0.0.0:5000: bind: address already in use.

이런 오류 메시지가 출력된다. 다른 프로세스가 이미 포트 5000을 사용 중이기 때문에 Docker 컨테이너가 해당 포트에 바인딩할 수 없다.

다른 필요 없는 프로세스면 종료를 시키고 진행했겠지만, ControlCe 프로세스가 포트 5000을 점유하고 있다. ControlCe는 일반적으로 macOS의 Control Center (제어 센터) 관련 프로세스다.

그래서 기존의 이 명령어 대신에

docker run -p 5500:5000 --env-file .env backend-chat-service

이렇게 로컬 환경에서의 포트는 5500을 사용하도록 설정해주었다.

  • 5500 → 호스트 머신의 포트.
  • 5000 → 컨테이너 내부 Flask 앱의 포트.

그런데 이렇게 하고 나서 잘 빌드가 되고 구동까지 잘 되는걸 확인했는데,

사이트에 연결할 수 없음, 페이지가 작동하지 않습니다. 에러 해결

사이트에 연결할 수 없음
http://localhost:6000/의 웹페이지가 일시적으로 다운되었거나 새 웹 주소로 완전히 이동했을 수 있습니다.
ERR_UNSAFE_PORT
페이지가 작동하지 않습니다.
localhost에서 전송한 데이터가 없습니다.
ERR_EMPTY_RESPONSE

이러한 오류를 마주했다.

Flask 앱의 호스트 및 포트 확인

main.py에 app을 시작하는 부분에 다음 코드를 입력하면 된다.

if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=5000)

나는 5500을 쓰니까 저거를 5500으로 해야 되는 걸로 생각했는데 아니더라. 저게 맞음.

docker log 확인

  1. 나는 import를 알고보니까 잘못하던게 있어서 그거를 수정했다.
from langchain_community.vectorstores import FAISS

원래 langchain.vectorstores에서 저렇게 수정했다.

  1. 특정 라이브러리(API 요청 시)에서 사용자 에이전트(USER_AGENT)를 설정하지 않았다는 경고가 있었다.
USER_AGENT environment variable not set, consider setting it to identify your requests.

그래서 환경변수 파일에 이걸 추가했다.

USER_AGENT=backend-chat-service

에러 해결 후, 접속 확인

http://localhost:5500/

여기에 접속해서 확인하면 된다.


  1. 모든 컨테이너 중지
docker stop $(docker ps -q)
  1. 이미지 빌드하기: 코드가 바뀐다면 매번 해주기
docker build -t backend-chat-service .
  1. 컨테이너 실행
docker run -p 5000:5000 --env-file .env backend-chat-service
docker run -d -p 8080:5000 --env-file .env backend-chat-service

옵션별 설명

-d 컨테이너를 백그라운드 모드로 실행 docker run -d -p 8080:5000 backend-chat-service
-p 호스트와 컨테이너 포트를 매핑 -p 8080:5000 (호스트의 8080 → 컨테이너의 5000)
--env-file .env 환경 변수 파일을 로드하여 실행 .env 파일에 설정된 API 키, 환경 변수 등을 컨테이너에 적용

profile
Spring Boot 백엔드 주니어 개발자

0개의 댓글