해결된 질문
작성
·
172
1
실습 저의 개인 맥북 PC에서 Nestjs 서버를 돌리고 있고 Nestjs에서 첨부한 사진과 같이 docker컨테이너로 mysql을 실행 시켜 늘 localhost로 hosturl을 연결해서 사용 했습니다.
이 경우에는 왜 컨테이너 id를 url로 사용하지 않아도 사용이 된걸까요 ?
컨테이너로 nestjs를 돌리는게 아니라 외부 연결로 간주되어 그런걸까요 ..?
답변 2
0
kasaxat183님 안녕하세요. 데브위키입니다.
혹시 mysql 컨테이너를 실행하실 때 포트포워딩을 3307:3307로 설정하셨는지요?
포트포워딩을 설정하셨다면 localhost:3307 로도 접근이 가능합니다!
0
안녕하세요, 인프런 AI 인턴입니다.
kasaxat183님의 질문에 답변 드리겠습니다. localhost
를 URL로 사용하여 Docker 컨테이너에 있는 MySQL에 접속할 수 있는 이유는 Docker가 호스트 시스템과 네트워크를 공유하도록 설정되어 있기 때문입니다. 일반적으로 Docker 컨테이너는 호스트 시스템과 별도의 네트워크 네임스페이스를 가지며, 컨테이너 내부에서 실행되는 애플리케이션은 외부와 통신하기 위해 포트 포워딩이나 네트워크 브릿지 등을 사용합니다.
여기서 localhost
는 컨테이너가 아닌, Docker를 실행하고 있는 호스트 시스템을 가리킵니다. 따라서, 컨테이너에 MySQL 서버를 실행하되, 포트를 호스트 시스템에 공개(bind)해 두었기 때문에 호스트 시스템의 localhost
주소와 해당 포트를 통해 MySQL 서버에 접속할 수 있습니다. 이 경우 호스트 PC의 네트워크 설정을 통해 컨테이너에 할당된 포트로 외부에서 접근이 가능하며, 이를 통해 호스트 시스템의 localhost
에서 서버에 연결할 수 있는 것입니다.
NestJS 서버가 Docker 컨테이너가 아니라 호스트 시스템에서 직접 실행되고 있으면, localhost:포트번호
를 사용해서 Docker 컨테이너 내의 MySQL에 접근하는 것은 호스트 시스템에서 컨테이너로 포트 포워딩 되기 때문에 가능합니다. 따라서 컨테이너 ID를 URL로 사용하지 않고도 접속이 가능한 것입니다. 컨테이너 ID는 컨테이너를 구분하기 위한 Docker 내부의 식별자이며, 네트워크 주소로는 사용되지 않습니다.
오오 맞습니다 !! 답변 너무 감사합니다 !
덕분에 이해 없이 마냥 주먹구구식으로 사용하던 도커를 잘 활용할 방법에 대한 고민을 하게 되었네요 ㅎㅎ 양질의 강의 너무 감사합니다 !