만자의 개발일지

[Docker] 컨테이너 내부에서 Host로 접근하기 본문

Docker

[Docker] 컨테이너 내부에서 Host로 접근하기

박만자 2022. 2. 24. 11:54

다음과 같은 상황이라고 가정해봅시다.

현재 서버에 두개의 컨테이너가 실행되고 있습니다. 하나는 Node.js로 만들어진 웹 어플리케이션 컨테이너, 하나는 MySQL이 돌아가고있는 컨테이너입니다. 각각 다른 컨테이너에서 돌아가고 있고, Host는 동일한 상황입니다. 만약 Node.js 에서 내 서버에 MySQL 컨테이너로 요청을 보낼려고 할때 localhost를 통해 요청을 보낼려하면 당연히 요청이 보내지지 않을 것입니다. 이유는 Node.js 기준 localhost는 Host가 아닌 Node.js 가 실행되고 있는 컨테이너가 기준이 되기 때문입니다. 때문에 MySQL로 요청을 보내기 위해서는 다른 방법으로 Host에 접근해야합니다. 

 

스택오버플로우 글에서 해답을 얻을 수 있었습니다.

https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach

 

From inside of a Docker container, how do I connect to the localhost of the machine?

So I have a Nginx running inside a docker container, I have a mysql running on localhost, I want to connect to the MySql from within my Nginx. The MySql is running on localhost and not exposing a p...

stackoverflow.com

 

윈도우나 맥의 경우 기본적으로 host.docker.internal 명령어로 컨테이너 내부에서 Host에 접근이 가능하다고 합니다.

Linux의 경우 컨테이너를 실행할 때 --add-host host.docker.internal:host-gateway 옵션을 지정해주면 컨테이너 내부에서 host.docker.internal 명령어를 사용할 수 있다고 합니다.

 

Host로 접근하기

예시를 위해 각자 다른 내용을 담은 Node.js 웹 어플리케이션 컨테이너를 두 개 띄워놨습니다.

$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                    NAMES
7d8fd10954dd   node-app-v2   "docker-entrypoint.s…"   28 minutes ago   Up 28 minutes   0.0.0.0:3001->3000/tcp   node-web-app-v2
1d58dde99867   node-app      "docker-entrypoint.s…"   30 minutes ago   Up 30 minutes   0.0.0.0:3000->3000/tcp   node-web-app

 

먼저 node-web-app 컨테이너로 접속해줍니다.

$ docker exec -it node-web-app /bin/bash
root@1d58dde99867:/app#

 

그 다음 현재 node-web-app 컨테이너 내부에서 node-web-app-v2 요청을 보내지는지 확인하기 위해 다음과 같이 명령어를 입력해주었습니다. Host로 요청이 잘 가는것을 확인할 수 있습니다.

$ curl host.docker.internal:3001
<h1>Hello Docker v2</h1>

 

공식 문서를 참고하시면 도움이 됩니다.

https://docs.docker.com/desktop/mac/networking/#i-cannot-ping-my-containers

 

Networking features in Docker Desktop for Mac

 

docs.docker.com

 

Comments