일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- CloudFormation
- Site-to-Site VPN
- transit gateway
- JavaScript
- null 병합 연산자
- 구조분해 할당
- Proxy Resource
- elasticsearch
- cognito
- api gateway
- grafana
- prometheus
- Endpoints
- 옵셔널 체이닝
- 온프레미스
- vgw
- 단축 평가
- DynamoDB
- AWS
- VPC
- Await
- On-Premise
- 비구조화 할당
- Kubernetes
- docker
- 자바스크립트
- optional chaining
- docker swarm
- Custom Resource
- Service
- Today
- Total
만자의 개발일지
[Docker] 컨테이너 내부에서 Host로 접근하기 본문
다음과 같은 상황이라고 가정해봅시다.
현재 서버에 두개의 컨테이너가 실행되고 있습니다. 하나는 Node.js로 만들어진 웹 어플리케이션 컨테이너, 하나는 MySQL이 돌아가고있는 컨테이너입니다. 각각 다른 컨테이너에서 돌아가고 있고, Host는 동일한 상황입니다. 만약 Node.js 에서 내 서버에 MySQL 컨테이너로 요청을 보낼려고 할때 localhost를 통해 요청을 보낼려하면 당연히 요청이 보내지지 않을 것입니다. 이유는 Node.js 기준 localhost는 Host가 아닌 Node.js 가 실행되고 있는 컨테이너가 기준이 되기 때문입니다. 때문에 MySQL로 요청을 보내기 위해서는 다른 방법으로 Host에 접근해야합니다.
스택오버플로우 글에서 해답을 얻을 수 있었습니다.
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
'Docker' 카테고리의 다른 글
[Docker] 댕글링(dangling) 이미지란? (0) | 2022.02.24 |
---|---|
[Docker] 컨테이너로 이미지 만들기 (1) | 2022.02.24 |
[Docker] Docker Compose 사용하기 (1) | 2022.02.23 |
[Docker] Docker 이미지 ECR에 푸쉬하기 (0) | 2021.12.28 |
[Docker] 이미지 태그에 timestamp 찍기 (1) | 2021.12.28 |