본문 바로가기
Cloud Side/Container > Docker

[Docker] 컨테이너 안에서 다른 컨테이너 접속하기 with.docker-compose

by developerBeluga 2022. 6. 22.
728x90
반응형

 

docker-compose를 이용해서 다중 앱 관리를 하고 있었습니다.

하지만 위 그림과 같이 A 컨테이너에서 B 컨테이너에 접속할 때는 어떻게 해야할까요?

 

예를 들어 A 컨테이너에서 axios.get를 이용해서 B 컨테이너에 있는 API를 호출합니다.

await axios.get("http://127.0.0.1:3000/test").then(response => {
      res.status(200).json(response.data);
    });

원래였다면 127.0.0.1:3000(=B host)로 호출하여 데이터를 받았을 것입니다.

하지만 이렇게 Docker에 올릴 경우 127.0.0.1:3000을 찾을 수 없다는 에러 문구가 나옵니다.

 

Docker에서 컨테이너 안에서 다른 컨테이너에 접속할때는 <별칭>:<포트 번호> 형식을 설정해줘야 합니다!

B:3000으로 해줘야지 호출이 가능하다는 것입니다.

 

docker-compose에서 형식을 설정하는 방법은 docekr-compose.yaml 파일에

services:
   A:
	(...)
	environment:
		B_URL: B:3000

위 코드와 같이 해당 컨테이너의 환경변수(=environmet)로 설정해주시면 됩니다.

 

그리고 다시 axiois.get 코드로 돌아가서

await axios.get(`http://${process.env.B_URL}/test`).then(response => {
      res.status(200).json(response.data);
    });

 

환경변수를 이용해주시면 잘 동작하는 것을 확인하실 수 있습니다.

※ Docker에서는 환경변수 사용을 권장하고 있습니다.

 

 

 

728x90
반응형

댓글