Docker 컨테너에서 호스트 PC 서비스 접근하기: host.docker.internal의 필요

 상황

Docker 컨테이너 내부에서 실행 중인 애플리케이션이 호스트 PC에서 실행 중인 다른 서비스에 접근해야 하는 경우가 있습니다.체적 예시:

  • Docker 컨테이너에서 실 인 management_app 
  • 호스트 PC에서 실행 중인 Ollama 서비 (http://localhost:11434)
  • 컨테이너 내부에서 Ollama API를 호출해야 하는 상황

 localhost 작동하지 는가?

# ❌ 이렇게 하면 작동하지 않음
http://localhost:11434/v1/chat/completions

 

이유:

  1. 워크 : Docker 컨테이너는 자체 네트워크 네임스페이스를 가짐
  1. localhost의 의미: 컨테이너 내부에서 localhost는 컨테이너 자신을 의미
  1. 포트 매핑의 한계: ports: "8001:8001" 호스트 → 컨테너 방향의 매핑

해결 방법: host.docker.internal

# ✅ 올바른 접근 방법
http://host.docker.internal:11434/v1/chat/completions

 

host.docker.internal의 역할:

  • Docker가 제공하는 특별한 DNS 이름
  • 컨테이너에서 호스트 PC의 IP 주소를 자동으로 해석
  • 스트 PC의 든 서비스에 접 가능

네트워크 구조 비교

실제 사용 예시

docker-compose-debug-mode.yml 설정:

 
 

컨테이너 내부 드:

대안 방법

  1. 호스트 IP 직접 사용 (.py)
     
     
  2. 호스트 트워크 모드 (.yaml)
     
     
  3. extra_hosts 설정 (.yaml)
     
     

언제 host.docker.internal이 필한가?

 필요한 경:

  • 컨테너에서 호스트 PC의 개 도구 접근 (Ollama, 데이터베이 )
  • 로컬  환경에서의 서비  통신
  • 디버깅 및 테스트 목적

 불필요한 경우:

  • 모든 서비스가 Docker 컨테이 행되는 
  • 로덕션 환경
  • 컨테이너 간 통신

결론

host.docker.internal은 Docker의 네트크 격리 특성 때문 발생하는 문제를 해결하는 핵 도구입다. 특 로컬 개발 환경에서 컨테이너와 호스트 PC 간의 서비스 통신이 필요할 때 필수, 이를 해 Docker의 장(격리성)을 유지하면서도 호스트 리소스에 접근할 수 있습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기