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
주소를 이용할 수 있다고 한다.