728x90
반응형
도커공부를 할겸, 로컬환경에서 프론트/백엔드를 분리하여 이미지를 만들었다.
목표는 프론트(nginx, vue)에서 백엔드(springboot)로의 호출을 가능하게 하는 것이다.
일단, 컨테이너들이 같은 네트워크안에 속하게 하기위해 docker-compose.yml을 작성하였다.
version: "3.8"
services:
front:
image: corn_front
ports:
- "9090:80"
back:
image: corn_back
ports:
- "8080:8080"
그 후 컨테이너를 실행시켰더니, front에서 back으로 호출이 안되는 현상을 발견하였다. 도린이라서 원인을 찾는데 살짝 삽질을 함
일단 원인은 nginx 설정 문제였다. 보통 배포를 할때 하나의 머신에서 fornt(nginx, apache), back(springboot, tomcat) 을 설치하기 때문에 upstream 설정일 127.0.0.1 에서 포트만 지정해주면 통신이 가능 했다.
upstream backend {
127.0.0.1:8080 max_fails=3 fail_timeout=10s;
}
이런식으로다. nginx에서 https(443)요청을 받고 api 요청은 8080포트로 전달해주는 식이다
그런데 도커에서는 컨테이너하나가 하나의 머신이기 때문에 각자가 ip를 갖고 있다. (그렇기 때문에 위와 같이 설정을 하면 통신이 불가하다.)
도커 컴포즈로 컨테이너를 올리면 컨테이너들은 같은 네트워크안에 존재하기 때문에 서로 통신이 가능하며 각 서비스(service)이름이 호스트이름이 된다.
즉, front(172.x.x.1), back(172.x.x.2) 이런식으로 말이다.
따라서 nginx 설정을 아래와 같이 변경했다.
upstream backend {
server back:8080 max_fails=3 fail_timeout=10s;
}
ip로 설정했던 부분을 호스트명으로 변경하였다.
location ^~/api{
proxy_pass http://backend;
proxy_pass_request_headers on;
proxy_set_header host $host;
access_log /dev/stdout;
error_log /dev/stderr;
}
변경 후 정상 동작하는 것을 확인하였다. 도커컴포즈 네트워크관련해서는 아래에 간단하게 정리해놓았다.
728x90
반응형
'Life > Today I Learned' 카테고리의 다른 글
2019/08/05 (0) | 2019.08.05 |
---|---|
2019/07/26 (0) | 2019.07.26 |
2019/06/12 (0) | 2019.06.12 |
2019/05/22 (0) | 2019.05.22 |
2019/05/10 (0) | 2019.05.10 |