작성
·
235
0
저는 스프링부트를 통해서 도커로 ec2 ubuntu에서 실행하고있는데요,, 왜인지 실행하면 Communications link failure 오류가 납니다.. ㅠ application.properties에서 url 문제인 것 같아서 host.docker.internal:3306 이런식으로도 바꿔봤더니 로컬에서 docker 컨테이너 실행시 잘 되는데, 여기서 ec2에 올려서 실행하면 안됩니다.. 그랬더니 저런 오류가 나요 혹시 제가 뭔가 빠트린게있는걸까요..? 저는 mysql local에서 돌리고싶습니다... rds나 docker 컨테이너에 mysql 띄우거나 그럴 생각은 없어서요..
ec2에서 보안그룹도 mysql 3306 포트로 모든접근 허용으로 다 열어줬는데 뭐 문제가 될만한게 어떤게있을까요..
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
유세정님, Docker를 사용하여 EC2 Ubuntu에서 Spring Boot 애플리케이션을 실행하며 겪고 계신 Communications link failure
오류는 두 가지 주요 원인으로 발생할 수 있습니다.
첫 번째, 도커 컨테이너가 EC2 인스턴스 내부에서 실행되고 있는 MySQL에 접근하지 못하는 상황입니다. host.docker.internal
는 Docker가 Windows나 Mac에서 호스트 컴퓨터와 통신하기 위해 제공하는 특수 DNS 이름입니다. 그러나 Linux 환경에서는 host.docker.internal
이 기본적으로 지원되지 않습니다. 따라서, EC2 Linux 환경에서는 이 DNS를 사용할 수 없어 연결 실패가 발생할 수 있습니다.
두 번째, EC2 보안 그룹 설정은 외부에서의 접근을 허용하지만, MySQL이 구동되고 있는 호스트 시스템(예를 들면, EC2 인스턴스나 로컬 환경)의 방화벽이나 MySQL 설정 자체가 외부 접속을 허용하도록 구성되지 않았을 수 있습니다. MySQL의 경우, bind-address
를 0.0.0.0
으로 설정하여 모든 IP 주소에서의 접속을 허용하도록 설정 파일을 조정해야 할 수도 있습니다.
해결 방법으로는, Docker 컨테이너에서 EC2 인스턴스 로컬에서 실행 중인 MySQL에 연결하려면 localhost
나 127.0.0.1
대신 EC2 인스턴스의 실제 IP 주소나 내부 네트워크 IP를 사용해야 합니다. 또한, MySQL 설정 파일(my.cnf 혹은 my.ini)에서 bind-address
가 외부 접속을 허용하도록 설정되어 있는지 확인해보세요.
EC2의 경우, 인스턴스의 내부 IP를 사용하는 방법이 있으나 동적으로 변경될 수 있으므로, 안정적인 연결을 위해서는 RDS 같은 관리형 데이터베이스 서비스의 사용도 고려해 보시는 것이 좋습니다.
도움이 필요하시다면 좀 더 구체적인 오류 메시지나 설정 정보를 공유해주시면 상세한 도움을 드릴 수 있습니다.