본문 바로가기

개발이야기/Docker

Docker application이 host machine의 application(localhost)에 접근하도록 하는 방법

docker application이 localhost를 call한다면?

Docker로 감싼 application이 host machine에 떠 있는 web application에 접근하려고 하면 어떤 현상이 일어날까요?

 

호출하기 위해 시도한 방법은 아래와 같습니다.

 

시도방법 : Docker application(alpine linux)에서 http://localhost:3000 호출

결과 : connection refuse 발생

사유 : Docker application이 자기자신의 docker container내부에 떠 있는 localhost를 호출함(not host machine)

 

당연히 Docker container내부의 localhost를 호출하다보니 timeout으로 인해 connection refuse가 일어날 수 밖에 없습니다.

 

이를 해결하기 위한 방법은 Docker 공식 홈페이지에 나와있었습니다.

 

Docker Desktop for Mac > Networking > Known limitations, use cases > I WANT TO CONNECT FROM A CONTAINER TO A SERVICE ON THE HOST

The host has a changing IP address (or none if you have no network access). From 18.03 onwards our recommendation is to connect to the special DNS name host.docker.internal, which resolves to the internal IP address used by the host. This is for development purpose and will not work in a production environment outside of Docker Desktop for Mac. The gateway is also reachable as gateway.docker.internal.

위와 같이 container 내부 application이 host machine의 node에 붙고 싶다면 endpoint DNS를 host.docker.internal로 설정하여 사용하면 된다고 합니다. 다만, 위 경고사항에 나와있다 싶이 development purpose목적으로만 사용하기를 권고합니다.

태그