본문 바로가기

About/Docker

[Docker] Docker 컨테이너에서 호스트 머신의 로컬호스트에 접속하는 방법 (host.docker.internal)

Docker를 사용하는 많은 개발자들이 직면하는 일반적인 문제 중 하나는 컨테이너 내부에서 호스트 머신의 로컬호스트에 어떻게 접근하는지에 관한 것입니다.

이 글에서는 Docker 컨테이너 내부에서 호스트 시스템의 로컬호스트에 연결하는 방법을 설명하겠습니다.

Docker 네트워크 이해

Docker 컨테이너는 기본적으로 격리된 환경을 제공합니다. 이 때문에 컨테이너는 자체적인 로컬호스트를 가지고, 이는 호스트 머신의 로컬호스트와는 다릅니다. 따라서, 컨테이너 내부에서 localhost 또는 127.0.0.1을 사용하여 호스트 머신의 서비스에 접근하려고 하면 연결되지 않습니다.

호스트 머신에 접근하기

Docker의 특수 DNS 이름 사용

Docker 18.03 버전 이후부터는 host.docker.internal DNS 이름을 사용하여 호스트 머신에 접근할 수 있습니다. 이 이름은 Docker가 자동으로 호스트 머신의 IP 주소로 해석해줍니다.

예시 코드

# Docker 컨테이너 내부에서 호스트 머신의 특정 포트에 연결하는 예
curl http://host.docker.internal:8000

 

이 예시에서는 컨테이너 내부에서 호스트 머신의 8000 포트에 서비스가 실행되고 있다고 가정하고 curl을 사용하여 접근합니다.

네트워크 설정 변경

Docker 네트워크 설정을 변경하여 호스트 머신에 접근하는 방법도 있습니다. 이를 위해 --net="host" 옵션을 사용하여 Docker 컨테이너를 실행할 수 있습니다. 이 옵션을 사용하면 컨테이너가 호스트 머신의 네트워크 스택을 직접 사용하게 됩니다.

예시 코드

# 호스트 네트워크를 사용하여 Docker 컨테이너 실행
docker run --net="host" your_image

 

이 방법을 사용하면 컨테이너는 호스트 머신의 IP 주소와 포트를 직접 사용할 수 있으며, localhost 또는 127.0.0.1을 사용하여 호스트 서비스에 접근할 수 있습니다.

정리

Docker 컨테이너에서 호스트 머신의 로컬호스트에 접근하는 것은 host.docker.internal DNS 이름 사용 또는 네트워크 설정을 변경하는 방법을 통해 가능합니다. 이러한 방법들을 이해하고 적절히 사용하면 Docker 환경에서의 개발 및 테스트가 훨씬 용이해집니다.

이 글이 Docker 컨테이너와 호스트 머신 간의 연결 설정에 대한 이해를 돕는 데 유용하길 바랍니다.