Docker Container에서 localhost로 Curl 하기

viram·2022년 11월 17일
0

나는 배포서버에서 돌아가는 배치를 테스트하고 개발하기 위해 Docker를 사용하고 있다. 최근에, localhost에서는 잘만 curl이 되는데 도커에서는 curl이 안되는 현상이 있었다. 찾아보니, 도커에서는 외부로 curl하기는 커녕 localhost로도 curl하기 힘든 상황을 호소하는 사람들이 많았다.
Docker가 왜 이런 현상을 가지게 됐는지, 그리고 어떻게 하면 해결할 수 있을지 알아본다.

Docker -> Localhost

결론부터 말하겠다. localhost, 127.0.0.1이 아니라 host.docker.internal을 이용하면 된다.

  • 왜 이런 일이 발생할까?

    • 우리가 보고 싶은 로컬호스트는 도커를 실행하고 있는 컴퓨터의 로컬호스트인데, 도커 컨테이너에서 로컬호스트를 가리키면 컨테이너의 WSL 스스로를 가리키게 된다. 따라서 내부 IP로 지정해줘야 하는데, 내부 IP는 불안정하고 환경마다 달라지게 되므로 도커에서 따로 명령어를 제공해 주는 것이다.
    • 참고로 Docker->localhost는 host.docker.internal으로 가능하다지만 localhost->Docker는 Windows Container에만 curl할 수 있다. 이 내용은 아래 공식문서에서 잘 설명해주고 있다.
    • 도커 공식문서 참고 - Known limitations for all platforms📚
  • host.docker.internal은 어떻게 구현되어 있을까?

    • host.docker.internal. 읽어보면 내부에서 도커를 호스트 해주고 있는 곳이다. Docker는 오픈소스이므로 host.docker.internal의 내부 구현 코드를 찾아볼 수 있다. 찾아보면, ipconfig을 이용해 내부 IP주소를 가져오고 이를 host.docker.internal에 매핑해준다.
profile
취미로 번역하고 직업으로 개발합니다

0개의 댓글