볼륨·네트워크·컴포즈 · 컨테이너 네트워킹 · 퀴즈
퀴즈: 컨테이너 네트워킹
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
컨테이너 안에서 `curl http://127.0.0.1:5432` 로 호스트의 DB 에 붙으려 했으나 연결이 거부됩니다. 왜입니까?
- 네트워크 네임스페이스는 루프백까지 복제하므로 그 127.0.0.1 은 컨테이너 자신을 가리킨다
- 호스트 방화벽이 막고 있어서
- 이름 해석이 되지 않아서
- 호스트에서 5432 포트가 닫혀 있고 DB 가 안 떠 있어서
기본 브리지 네트워크에서 컨테이너 이름으로 `ping` 이 안 되는 이유는?
- 기본 브리지에서 ICMP 패킷이 차단되어 있기 때문에
- 두 컨테이너가 같은 서브넷에 있지 않아서
- 호스트에 DNS 서버가 없어서
- 기본 브리지에는 이름 해석 기능이 없고, 사용자 정의 네트워크에서만 내장 리졸버가 이름을 답해 준다
앱이 `127.0.0.1:3000` 에 바인딩되어 있어 호스트에서 접근이 안 됩니다. 올바른 수정은?
- -p 의 포트 매핑을 다시 잡는다
- 앱이 컨테이너 안에서 `0.0.0.0:3000` 에 바인딩하게 한다
- 컨테이너를 특권 모드로 다시 띄운다
- --network host 로 바꿔 띄운다
`-p 5432:5432` 로 DB 를 퍼블리싱한 서버에서 호스트 방화벽으로 5432 를 막았는데도 외부에서 접속됩니다. 이유는?
- 컨테이너로 가는 패킷은 호스트가 최종 목적지가 아니라 일반적인 입력 체인을 지나지 않고, 그 전에 이미 목적지가 바뀌기 때문
- 입력 체인에 넣은 방화벽 규칙의 문법을 잘못 써서 규칙이 적용되지 않기 때문
- 도커가 호스트 방화벽을 통째로 껐기 때문
- 같은 포트가 두 군데에서 열려 있기 때문
프론트엔드/백엔드 네트워크를 나누고 앱만 양쪽에 붙이는 구성의 이득은?
- 트래픽이 나뉘어 속도가 빨라진다
- 쓰는 IP 주소 수를 아낀다
- 네트워크별로 로그가 나뉘어 깔끔해진다
- DB 가 프론트엔드 쪽에서 아예 보이지 않아 접근 경로 자체가 사라진다
컨테이너를 여러 네트워크에 동시에 붙일 수 있습니까?
- 아니오, 하나만 가능하다
- 생성 시에만 여러 개 지정 가능하다
- 예 — 이미 실행 중인 컨테이너에도 추가로 연결할 수 있다
- 특권 모드에서만 가능하다