해결된 질문
작성
·
46
1
강의 너무 감사합니다!
질문사항이 있어 문의드립니다.
yml파일 내부 db: 하위 ports: 설정부분을 보면
3306:3306으로 지정되어 있습니다만,
현재 제 로컬 PC에서 mysql server가 3306포트로 실행되고 있어서 에러를 만났습니다.
그런데, 가만히 생각해보니 Flask 앱이 아닌, 제가 로컬(제 PC)에서 직접 요청을 할 일이 없는 경우라면 ports 설정이 필요한가요?
당장의 실습 환경에서 코드를 봤을 땐 호스트(로컬PC)에서 접근할 만 한 기능이 들어가 있는 것 같지는 않아서 db의 ports 설정부분을 제거하고 실행했을 땐 정상적으로 앱이 동작했습니다.
제가 생각하지 못한 필요한 경우가 있을까 궁금하여 질문드립니다.
제 로컬에서 실행되는 MySQL이 강제로 종료해도 데몬으로 등록되어있어서 계속 살아나더군요. 결국 데몬 등록을 없애고 수동으로 종료를 확인한 후에 다시 compose up --build했을 때는 됩니다.
최종적으로 질문을 정리해보자면 혹시 "호스트로 내 로컬을 지정하지 않고 (즉, ports 설정을 하지 않고) 도커 네트워크 안에서 통신하도록 구성한 상황에서 문제상황이 생긴다면 어떤 게 있을까요?" 정도 인 것 같습니다.
답변 2
1
0
안녕하세요, 인프런 AI 인턴입니다. 이예찬님,
먼저 Docker 환경에서 발생할 수 있는 포트 충돌 문제에 대해 질문 주셔서 감사합니다. Docker Compose를 사용할 때 ports
설정을 통해 컨테이너의 특정 포트를 호스트의 포트와 연결해 주는데요, 이 경우 호스트 PC 내에서 이미 사용 중인 포트와 충돌할 수 있습니다. 특히, MySQL의 기본 포트 3306은 많은 사람들이 로컬 개발 환경에서 사용하기 때문에 이 오류가 발생할 수 있습니다.
ports
설정의 필요성내부 통신: Docker 내부에서만 데이터베이스를 사용할 계획이라면 ports
설정이 꼭 필요하지 않을 수도 있습니다. 컨테이너 간의 통신은 Docker Network를 통해 이루어지며, 이는 ports
없이도 가능합니다. 컨테이너의 서비스들이 동일한 네트워크로 설정되어 있다면, localhost
대신 컨테이너 이름을 사용하여 서로 통신할 수 있습니다.
외부 접근: 만일 로컬 PC의 MySQL 클라이언트 프로그램 혹은 다른 외부 애플리케이션에서 Docker 컨테이너 내부의 데이터베이스에 접근해야 하는 경우라면 ports
설정을 해야 합니다. 그렇지 않으면 외부에서 해당 DB에 접속할 수 없습니다.
실습 및 테스트 환경: 만약 학습 중이거나 테스트 환경이라면, 내부에서만 DB를 사용하도록 설정하는 것이 관리하기 더 쉬울 수 있습니다. 필요하다면 Docker Compose의 특정 서비스에 대해 environment
설정을 통해 포트 속성을 변경할 수도 있습니다.
제가 질문자님의 상황을 고려하여 유사한 답변 링크를 추천해드리겠습니다.
위 링크에서는 Docker 환경에서 발생할 수 있는 다양한 문제와 그 해결법에 대해 상세히 다루고 있습니다. 질문자님의 현재 상황에 많은 도움이 되리라 생각합니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 주셔서 감사합니다!
추가적으로 구글링을 해봤는데, 보통 로컬에서 개발을 하다 보면 접근할 일이 개발 하다보면 있을 수 밖에 없을 것 같은...? 느낌이 드네요.
가능한 한 데이터베이스로 접근할 수 있도록 세팅을 해보겠습니다!