[Docker] 컨테이너에서 호스트 포트에 접근

곽우현·2022년 4월 25일
1

Docker

목록 보기
1/2

현재 나의 상황

Spring boot를 사용하여 개발을 하고있고 AWS의 DocumentDB를 사용중이라 local에서 터널링을 사용하여 접근하고있다.
터널링이 정상적으로 되고 local에서 jar로 실행할 경우 localhost:27017로 접근하면 접근이 가능하다.
그러나 서버를 도커로 구동할 경우 localhost:27017의 DocumentDB가 접근이 되지 않는다.
이유는 도커 컨테이너 내부에는 27017이 어떠한 프로그램도 구동되지 않기 때문인거 같다.

해결방법

호스트에서 도커 컨테이너의 포트로 접근할 경우 컨테이너를 구동시킬때 -p옵션을 주면 된다. docker run -p 8080:8080 {image}

반대로 도커 컨테이너에서 호스트의 포트로 접근할때는 localhost를 대신하여 host.docker.internal을 사용하면 해결된다.
Docker에서는 자체적으로 host.docker.internal이라는 도메인 네임을 가상으로 제공해주고 이를 이용하면 도커 인스턴스 내부에서 호스트의 포트에 접속하는 것이 가능하다고 한다.

spring:
  config:
    activate:
      on-profile: local
  mongo:
    user: {계정}
    password: {패스워드}
    port: 27017
    host: host.docker.internal
    database: {데이터베이스}

만약 게이트웨이에 접근해야 한다면 gateway.docker.internal주소를 이용할 수 있다고 한다.

참고자료
https://seorenn.tistory.com/20

profile
주니어 Java 개발자

0개의 댓글