Docker

[Docker] 컨테이너와 호스트 머신 간 통신하는 방법 한 번에 정리하기

심플코드 2025. 2. 1. 07:37
반응형

컨테이너와 호스트 머신 간 통신 시 생기는 문제

우리가 로컬에서 여러 애플리케이션을 실행하면, 해당 애플리케이션들과 통신하기 위해 localhost를 사용한다. 하지만, 컨테이너 위에서 실행되는 애플리케이션은 격리된 네트워크망 내부에 있기 때문에 localhost를 사용하면 호스트 머신에서 실행되는 애플리케이션과 통신하지 못한다.

 

호스트 머신에서 실행 중인 웹 애플리케이션과 Mongo DB의 통신을 생각해보자. Mongo DB가 27017번 포트를 점유해 실행된다고 할 때, 웹 애플리케이션에서 Mongo DB에 접속하기 위해서는 다음 주소를 사용하면 된다.

mongodb://localhost:27017/[데이터 베이스 이름]

 

하지만 컨테이너 위에서 실행 중인 웹 애플리케이션과 호스트 머신에서 실행 중인 Mongo DB와 통신하려 할 때 위의 주소를 사용하면. 27017번 포트에서 실행 중인 Mongo DB를 찾지 못한다. 외부의 네트워크와 격리된 네트워크에서 실행 중이기 때문이다. 

 

컨테이너와 호스트 머신 간 통신하기

이런 문제를 해결하려면 Docker에서 호스트 머신과 연결하기 위해 제공되는 호스트인 host.docker.internal을 사용해야 한다. 즉, 컨테이너 환경에서 실행 중인 웹 애플리케이션에서 호스트 머신의 Mongo DB에 접속하기 위해서는 다음 주소를 사용해야 한다.

mongodb://host.docker.internal:27017/[데이터 베이스 이름]

 

host.docker.internal의 한계

host.docker.internal는 Window와 macOS에서만 제공된다. 만약 Linux에서 사용하려면 해당 애플리케이션이 실행 중인 IP 주소를 확인해 통신해야 한다. IP 주소를 확인하려면 docker inspect 명령어를 쓰면 된다.

docker inspect mongodb

 

그러면 Network - bridge 섹션에 IPAddress가 나오는 것을 확인할 수 있다. 이를 사용해 통신하면 된다.

 

반응형