컨테이너가 할 수 있는 통신 종류
- 웹 서버로의 통신 -> 그냥 됨
- 호스트 머신과의 통신
- 다른 컨테이너와의 통신
1. 호스트 머신과의 통신
- 웹서버와 MongoDB에 접근하는 도커 앱이 있을 때 MongoDB가 컨테이너에 없으면 에러가 발생한다.
- 호스트 머신에 설치된 mongoDB에
host.docker.internal
을 도메인 주소로 사용하여 도커가 접근할 수 있다.
2. 컨테이너간 통신하는 법
2.1. 기본적인 방법
- MongoDB 컨테이너 생성
docker run -d --name mongodb mongo
- MongoDB 컨테이너 IP 확인
docker container inspect mongo
- 애플리케이션 코드 내 DB 접근 url에 MongoDB 컨테이너 IP 사용
mongoose.connect(
'mongodb://172.17.0.2:27017/swfavorites',
{ useNewUrlParser: true },
(err) => {
if (err) {
console.log(err);
} else {
app.listen(3000);
}
}
);
2.2. 더 좋은 방법(--network 태그 이용)
- 네트워크 생성
docker network create [network name]
- 도커 내부에 생성되는 네트워크이다.
docker network ls
로 확인 가능
- 특정 네트워크를 아용하는 컨테이너 생성
docker run -d --name mongodb --network favorites-net mongo
- 애플리케이션 내 통신코드에서 IP주소를 연결하려는 컨테이너 이름으로 수정
mongoose.connect(
'mongodb://mongodb:27017/swfavorites',
{ useNewUrlParser: true },
(err) => {
if (err) {
console.log(err);
} else {
app.listen(3000);
}
}
);
- 코드를 수정했으므로 이미지 리빌드
docker build -t favorites-node .
- 컨테이너 생성
docker run --name favorites -d --rm -p 3000:3000 --network favorites-net favorites-node
Summary