Home Docker Internal
Post
Cancel

Docker Internal

1. 글을 작성하게 된 계기


서버 비용을 절감하기 위해 로컬 환경에서 부하 테스트를 진행하고 있었습니다. 이 과정에서 도커와 호스트 간 통신이 되지 않는 이슈가 발생했는데, 어떤 문제가 있었고, 어떻게 해결했는지에 대해 정리하기 위해 작성한 글입니다.







2. 상황


AWS에 배포 후 테스트하는 것은 비용이 지속적으로 발생했습니다. 이를 해결하기 위해 로컬에서 애플리케이션을, 도커를 사용해 ngrinder를 실행해 테스트 비용을 절감하려고 시도하고 있었습니다.

  1. localhost로 애플리케이션 실행
  2. 도커로 ngrinder 실행





Ngrinder에서는 localhost로 접근하면 에러가 나기 때문에 다음과 같이 127.0.0.1로 접근하고 있었습니다.

image







이때 validate를 누르니 다음과 같은 에러가 발생했습니다.

1
2
3
4
5
6
7
Connection refused
java.net.ConnectException: Connection refused
	at org.apache.hc.core5.reactor.InternalConnectChannel.onIOEvent(InternalConnectChannel.java:64)
	at org.apache.hc.core5.reactor.InternalChannel.handleIOEvent(InternalChannel.java:51)
	at org.apache.hc.core5.reactor.SingleCoreIOReactor.processEvents(SingleCoreIOReactor.java:179)
	at org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:128)
	at 







3. 해결


host.docker.internal을 사용하면 컨테이너와 호스트의 통신이 가능합니다. 이는 도커 컨테이너에서 외부 환경(host)에 접속하기 위해 DNS 이름을 제공하며, 이를 통해 도커가 자동으로 호스트 시스템의 IP 주소를 해석해 줍니다.

1
http://host.docker.internal:${PORT}/URL







이를 적용하면 다음과 같이 로컬 애플리케이션과 연결이 된 것을 볼 수 있습니다.

image







4. 정리


도커 컨테이너에서 호스트와 통신하기 위해서는 host.docker.internal를 사용해야 합니다. 이를 적용하면 DNS를 제공해 도커가 호스트와 통신할 수 있습니다.


This post is licensed under CC BY 4.0 by the author.