인프런 커뮤니티 질문&답변
컨테이너의 IP
작성
·
27
0
각 컨테이너마다 고유의 IP 주소를 가지고 있잖아요.
docker run -d -p 4000:80 nginx근데 이 명령어에는 컨테이너의 IP 정보가 없는데, 어떻게 매핑이 되나요? 컨테이너가 여러 개이고, 모두 동일한 포트를 쓰면 구분이 안가잖아요.
호스트 IP: localhost
호스트 포트: 4000
컨테이너 IP: ???
컨테이너 포트: 80
답변 2
0
안녕하세요! 추가 질문 잘 해주셨어요 ~
질문해 주신 내용에 대해 답변드려볼게요 ~
"컨테이너의 IP 정보가 없는데, 어떻게 매핑이 되나요? 컨테이너가 여러 개이고, 모두 동일한 포트를 쓰면 구분이 안가잖아요."
-> 결론부터 말씀드리면, -p 옵션을 사용한 포트 매핑에서는 컨테이너 IP를 신경 쓸 필요가 없어요 !
그 이유는 Docker가 내부적으로 알아서 처리해주기 때문인데요, docker run 명령어로 컨테이너를 생성하면 Docker가 자동으로 해당 컨테이너에 내부 IP(예: 172.17.0.2)를 할당해줘요 !
그리고 -p 4000:80 옵션을 주면 Docker가 "호스트의 4000번 포트로 들어오는 요청을 이 컨테이너의 80번 포트로 보내줘"라는 규칙을 자동으로 만들어주는 거예요 !
이 과정에서 Docker는 해당 컨테이너의 내부 IP를 이미 알고 있기 때문에 우리가 직접 IP를 지정하지 않아도 알아서 매핑이 돼요 !
"컨테이너가 여러 개이고, 모두 동일한 포트를 쓰면 구분이 안가잖아요."
-> 이 부분도 걱정하지 않으셔도 돼요 !
nginx 컨테이너를 3개 띄운다고 하면 아래처럼 호스트 포트를 다르게 지정해주면 돼요 !
각 컨테이너는 독립적인 네트워크 네임스페이스를 가지고 있어서 구분이 돼요 !
docker run -d -p 4000:80 nginx # 컨테이너1: IP 172.17.0.2
docker run -d -p 5000:80 nginx # 컨테이너2: IP 172.17.0.3
docker run -d -p 6000:80 nginx # 컨테이너3: IP 172.17.0.4
이렇게 실행하면 세 개의 컨테이너가 모두 내부적으로는 80번 포트를 사용하지만, 각각 다른 IP 주소를 받아요 ~
그리고 호스트의 4000, 5000, 6000번 포트가 각 컨테이너의 80번 포트로 매핑되는 거죠 !
Docker는 "호스트 4000번으로 들어온 요청은 172.17.0.2:80으로 보내고, 5000번으로 들어온 요청은 172.17.0.3:80으로 보내자"라고 내부적으로 라우팅 규칙을 만들어줘요 !
즉, 컨테이너끼리는 내부 IP가 다르기 때문에 Docker 입장에서는 구분이 가능하고, 외부에서 접근할 때는 호스트 포트 번호로 구분하는 구조인 거죠!
정리하면, 컨테이너의 IP는 Docker가 자동으로 관리해주는 영역이라 우리가 직접 지정하거나 신경 쓸 필요 없이, 호스트 포트만 다르게 설정해주면 여러 컨테이너도 문제없이 사용할 수 있어요 :)
추가로 궁금하신 점 있으시면 언제든 편하게 추가 질문 남겨주세요~~
0
안녕하세요, 인프런 AI 인턴입니다. 매콤한각설탕님.
Docker 컨테이너는 기본적으로 자체적인 네트워크 인터페이스를 가지며, 컨테이너가 시작될 때 Docker 데몬에 의해 자동으로 IP 주소가 할당됩니다. 각 컨테이너는 자체 네트워크 내에서 고유의 IP 주소를 가지지만, 일반적으로 로컬 개발이나 테스트 환경에서는 이 IP 주소를 신경 쓸 필요가 거의 없습니다. 이유는 다음과 같습니다:
포트 매핑:
docker run -d -p 4000:80 nginx명령어에서-p 4000:80은 호스트의 포트 4000을 컨테이너의 포트 80으로 매핑하는 의미입니다. 이 방식 덕분에 포트 4000을 통해 외부에서 컨테이너의 포트 80에 접근할 수 있습니다. 즉, 여러 컨테이너가 동일한 포트를 사용하더라도, 호스트의 서로 다른 외부 포트를 통해 접근할 수 있으므로 구분이 가능합니다.네트워크 격리: Docker는 기본적으로 각 컨테이너를 격리된 네트워크에서 실행되도록 합니다. 이를 통해 같은 호스트의 포트 번호가 다른 컨테이너와 겹치는 일이 없도록 고유한 포트 매핑을 허용합니다.
컨테이너 IP 주소의 자동 할당: 컨테이너가 시작되면, Docker는 브리지 네트워크를 통해 자동으로 IP 주소를 할당합니다. 이는 내부 네트워크에서의 통신을 지원하지만 외부에서의 접근은 포트 매핑을 통해서만 가능합니다.
관련하여 더 자세한 네트워크 및 포트 매핑 동작 원리에 대한 질문이 있다면, 아래 링크를 참고해 보세요:
- Docker에서 포트 매핑과 컨테이너 네트워크 이해하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




