인프런 커뮤니티 질문&답변

손창현님의 프로필 이미지
손창현

작성한 질문수

초보를 위한 도커 안내서

컨테이너간 통신 질문

해결된 질문

작성

·

1.1K

1

안녕하세요 :)
좋은 강의를 통해 학습하고
실제 프로젝트를 도커 이미지화 해보려고 노력하고 있습니다
 
이 과정에서 궁금증이 생겼는데요
 
현재 react + nginx 를 사용한 클라이언트단 이미지를 만들어서 컨테이너를 생성하고,
mysql 이미지를 통해 컨테이너를 생성하고,
spring boot 프로젝트를 빌드하여 이미지 생성, 컨테이너 생성하였습니다.
network를 생성하여 3개의 컨테이너를 하나의 network로 묶어두었는데
 
클라이언트앱에서 서버 api를 호출할 때,
로컬에서만 작업을 했다보니까
POST localhost:8080/api/user/signup 이런식으로 호출을 하고 있습니다.
 
저는 같은 네트워크로 묶었고, 포트80으로 연결을 해서 통신이 될거라고 생각을 했는데
엔진엑스에서 405 Not Allowed가 뜨네요ㅠㅠㅠ

api 호출하는 기본 url을 서버단 컨테이너의 ip주소로 해야한다거나
통신하는 방법이 따로 있을까요 ..?

+ 도커 컴포즈 depends on 이나 link를 사용하지 않을 경우
서버 컨테이너를 먼저 띄우고, 클라이언트 컨테이너를 띄울때 주는 옵션이나 이런게 있을까요 ?

답변 1

1

subicura님의 프로필 이미지
subicura
지식공유자

안녕하세요!

 

react / spring boot / mysql 을 컨테이너로 관리했을때 연결하는 방법은 두가지가 있습니다.

1. 가상 network 사용

같은 network로 묶을 경우 container name을 host명으로 사용할 수 있습니다.

예를 들어 mysql 컨테이너를 mysql이라는 이름으로 생성했다면 spring boot에서 localhost대신 mysql을 호스트명으로 사용하시면 됩니다.

2. host network로 port를 노출하여 연결

-p 옵션을 이용하여 컨테이너의 포트를 호스트로 연결하고 호스트 IP를 사용할 수 있습니다. localhost대신 호스트(서버)의 IP를 입력하시면 됩니다.

1번의 장점은 호스트 포트를 사용하지 않기 때문에 포트가 겹칠 걱정없이 사용할 수 있지만, 하나의 서버에 3개의 컨테이너를 모두 실행해야 합니다. 2번은 여러개의 서버에 컨테이너를 분산 관리하는 경우에도 사용할 수 있습니다.

 

두번째 질문하신 depends_on 옵션의 경우 docker는 비슷한 기능을 제공하지 않습니다. 일반적으로 restart옵션을 always로 설정하고 필요한 컨테이너가 실행되기 전에 먼저 실행되면 실패 후 다시 재시도 하는 방법을 사용합니다.

약간 지저분해 보인다고 생각할 수 있는데, 컨테이너는 언제든지 죽었다 살아날 수 있고 재시도 후 다시 성공하도록 구성하는게 일반적이라고 생각하시면 좋습니다.

 

감사합니다!

손창현님의 프로필 이미지
손창현

작성한 질문수

질문하기