해결된 질문
24.05.27 18:37 작성
·
286
·
수정됨
0
ci/cd가 끝난 후 ec2에서 docker ps
명령어를 쳤는데 컨테이너가 실행되지 않습니다. docker ps -a
명령어로 보니 status 가 Exited로 나오네요.
ec2 사양은 t2micro 로 했는데 이 영향이 있을까요?
답변 1
0
2024. 05. 27. 20:42
안녕하세요 happycoding님!
EC2 자체가 멈추지 않았다면 t2.micro가 영향을 미치진 않은 것으로 보입니다.
docker logs라는 명령어를 활용해 왜 종료되었는 지 로그를 확인해보는 게 좋을 것 같습니다!
로그를 확인했는데도 왜 작동하지 않는 지 파악이 안 되신다면 또 질문 남겨주세요:)
2024. 05. 28. 09:38
DB 연결에 문제가 있는 것 같네요!
연결에 문제를 일으킬 수 있는 경우는 다양하게 존재합니다!
그러다보니 아래 순서로 한 번 시도해보면서 어떤 지점이 문제의 지점인지를 파악하는 게 우선일 것 같습니다.
보안그룹 문제
말씀해주신 인바운드 규칙에는 크게 문제가 없어보이나, 혹시나 보안그룹에 대한 특정 설정이 잘못돼서 발생할 수도 있습니다. 따라서 퍼블릭 IP를 할당하고 보안그룹에 3306을 허용한 채로 RDS가 잘 연결이 되는 지 확인해보시면 좋을 것 같습니다. 만약 연결이 잘 된다면 보안그룹 문제입니다.
Docker 문제
Docker의 네트워크 관련 문제로 DB와 연결이 잘못됐을 가능성이 있으니, Docker를 쓰지 않고 우선 RDS와 연결이 잘 되는 지 확인해보세요. 만약 Docker를 안 썼을 때 연결이 잘 된다면 Docker에서 발생한 문제입니다.
DB 주소 잘못 기재
DB 주소를 정확히 잘 기재했는 지 확인해보셔도 좋습니다. 연결이 잘 이루어지는 지 아래 방법을 활용해 테스트해볼 수 있습니다.
위 3가지 방법을 테스트하신 후 어떤 부분에 문제가 있는 지 확인이 된다면 다시 질문 한 번 남겨주세요~!!
2024. 05. 28. 10:26
친절한 답변 감사드립니다! 재성님께서 답변해주신 내용을 보고 제가 시도해본 것들은 다음과 같습니다.
1. EC2에 접속해서 RDS 로 curl -v telnet://주소 명령어 -> 정상적으로 연결이 확인됩니다.
2. 프로젝트를 빌드한 후에 EC2에 바로 파일질라를 이용해서 배포 후 실행 -> 애플리케이션이 정상적으로 실행이 됩니다. -> 웹에서도 정상적으로 접근이 가능합니다.
두 가지 다 정상적으로 되는 것으로 보아 말씀해주신 도커의 문제가 아닐까 의심이 됩니다.
제 EC2 스펙입니다.
- AMI: ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-20240423
- t2micro
- 나머지는 기본
- 탄력적 IP 할당해놓은 상태
- 보안그룹은 80, 443, 8080, 22 포트를 인바운드 열어놨습니다.
- 퍼블릭 서브넷에 위치시켜놨습니다.
RDS 스펙입니다.
- mysql
- 퍼블릭 엑세스 허용 X
- EC2가 위치한 vpc 내에 프라이빗 서브넷을 두어 위치시켰습니다.
- 별도의 보안그룹을 두었습니다. (대상은 ec2 보안그룹으로 해놨고, 3306 포트를 열어두었습니다.)
도커 및 도커 컴포즈 설치는 강의를 보며 제공해주신 자료의 명령어로 수행하였습니다.
도커 버전: Docker version 26.1.3, build b72abbb
도커 컴포즈 버전: Docker Compose version v2.27.0
도커에서 오류가 나는 것 같은데, 이럴 때는 어떻게 접근을 하면 좋을까요? 😭
--- 추가
rds를 새로 만들어서 아예 별도의 vpc에 새로운 서브넷에 생성하고 퍼블릭 엑세스까지 허용하고 ci/cd 를 다시 돌려봤는데 도커 컨테이너는 실행이 되다가 바로 꺼져버리네요...하핫 진짜 어렵네요ㅠ
--- 해결
전혀 엉뚱한 곳에 문제가 있었는데 이상한데를 삽질하고 있었네요 ㅠ 프로필을 환경에 따라 구분하고 있었는데 도커파일에서 ENTRYPOINT에 프로필을 넣어서 java -jar 를 해줘야 하는데 그걸 빼먹고 있어서 application.yml을 읽어들이지 못 해서 커넥션을 획득하지 못 했던 거 같아요!
재성님 친절한 답변 너무 도움 많이 됐습니다. 감사합니다!
2024. 05. 28. 17:13
해결하셨다니 다행이네요😊
어떤 게 문제였고 어떻게 해결하셨는 지도 공유해주셔서 감사합니다!
혹시나 비슷한 문제를 겪고 있으신 분들한테 큰 도움이 되겠네요ㅎㅎ
다음에 또 궁금한 점 생기시면 질문 남겨주세요~~
2024. 05. 27. 21:12
빠른 답변 감사드립니다! DB 쪽 문제인 것 같습니다. 에러가 다음과 같습니다.
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Caused by: java.net.ConnectException: Connection refused
현재 EC2와 RDS를 이용해서 하고 있고, RDS는 퍼블릭 IP를 할당하지 않고 EC2 보안그룹을 RDS 인바운드 규칙 대상에 추가해서 EC2에서만 RDS에 접속할 수 있게 해놓은 상태입니다.
혹시 이 부분 때문에 DB를 연결하지 못 해서 이런 에러가 발생하는걸까요?