작성
·
88
0
안녕하세요 강의 잘 듣고 있습니다 감사합니다docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=test123 -d mysql
이렇게 컨테이너를 실행한 후, datagrip을 통해서
url: jdbc:mysql://localhost:3306 로 정상 접속되는 것 확인했습니다.
하지만,
docker run -p 3306:8888 -e MYSQL_ROOT_PASSWORD=test123 -d mysql
이렇게 실행하고 동일한 database url로 접속 시도하면 되질 않습니다.
3306으로 접속 시도하면 컨테이너 내부의 8888 mysql port와 매핑되어 있기 때문에 접속이 되어야하지 않나요?
호스트, 컨테이너 포트를 동일하게 설정해야만 컨테이너 내부 mysql db에 접속이 가능한 이유가 잘 이해되지 않습니다.
답변 부탁드립니다!
답변 2
0
안녕하세요 재영님! 질문 잘 해주셨습니다:)
컨테이너 내부에서는 mysql이 기본적으로 3306번 포트에서 실행되게 됩니다.
즉, docker run -p 3306:8888 -e MYSQL_ROOT_PASSWORD=test123 -d mysql
라는 명령어를
입력한다고 하더라도 mysql은 컨테이너 내부의 3306번 포트에서 실행되고 있게 됩니다.
즉, 컨테이너 내부에서 8888번 포트에서는 아무 것도 실행되고 있지 않은데
컨테이너 외부의 3306번 포트와 8888번 포트를 연결시킨 상태인 것입니다.
그런 이유 때문에 mysql로 접속을 시도해도 접속이 안 된 것입니다!
만약 docker run -p 4321:3306 -e MYSQL_ROOT_PASSWORD=test123 -d mysql
이라고 명령어를 입력하셨다면
datagrip을 통해서 url: jdbc:mysql://localhost:4321로 접속을 하실 수 있으실거에요!
위 설명을 읽어보시고 이해 안 되시는 부분이 생기시면 댓글 달아주세요~~
0
안녕하세요, 인프런 AI 인턴입니다. 재영님.
컨테이너의 포트 매핑 설정에 대해 질문 주셨네요. Docker를 사용할 때 포트 매핑은 중요한 개념으로, 이것이 어떻게 작동하는지를 이해하는 것이 문제 해결에 도움이 됩니다.
docker run -p 호스트포트:컨테이너포트
명령어는 호스트와 컨테이너 간의 네트워크 포트를 연결하는 역할을 합니다. 여기서 중요한 것은, 호스트의 어느 포트를 컨테이너의 어느 포트에 연결할 것인지를 지정하는 것입니다.
-p 3306:3306
: 이 설정은 호스트의 3306 포트를 컨테이너의 3306 포트에 직접 연결합니다. 이렇게 하면 Datagrip에서 jdbc:mysql://localhost:3306
으로 접근할 때 호스트의 3306 포트가 컨테이너의 MySQL 3306 포트와 연결되기 때문에 정상적으로 접속이 가능합니다.
-p 3306:8888
: 이 경우에는 호스트의 3306 포트를 컨테이너의 8888 포트에 연결하는 것입니다. 그러나 MySQL이 기본적으로 3306 포트에서 실행되고 있기 때문에 오류가 발생합니다. jdbc:mysql://localhost:3306
은 애초에 호스트의 3306 포트에 접근하고, 이는 컨테이너의 8888 포트와 연결되어 있지만 실제 MySQL 서비스는 여전히 컨테이너 내부의 3306 포트에서 실행되고 있어 연결이 되지 않습니다.
결론적으로, 컨테이너의 MySQL이 기본적으로 3306 포트에서 실행되고 있으므로 호스트와 컨테이너 포트가 동일해야 하는 것입니다. 만약 다른 외부 포트를 사용하려면 컨테이너 내부의 포트도 변경해주어야 합니다.
도움이 되었길 바라며, 아래 유사한 질문들을 참고하셔서 더 깊이 있는 이해를 도울 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.