[EC2] 서버 재부팅 시 docker restart 하는 법

peace w·2025년 5월 30일

EC2 서버가 뻗어서 재부팅했다
EC2에 엮여있는 RDS도 DBeaver에서 로딩이 안 돼서 재부팅할 수 밖에 없었다..
(안 하고 싶었지만...)

ERROR 상황

서버를 재부팅했더니 잘 되던 api들이 502 Bad Gateway가 발생했다.
502는 다른 서버로부터 유효한 응답을 받지 못했을 때, 발생한다.

github actions 와 docker를 사용해서 올려놨었는데, 컨테이너가 중단되어 있는게 아닐까 싶어서 아래의 명령어로 확인해보았다.

$ sudo docker ps -a

8일 전에 만들어진 컨테이너가 Exited 상태인 것을 확인할 수 있었다.

컨테이너 재시작하기

$ sudo docker restart {컨테이너 id}

restart 명령어를 사용하여 컨테이너를 재시작시켰다.

api가 정상적으로 작동되는 것을 확인했으나, CI/CD가 제대로 이루어지지 않았다.
CI 단계에서 부터 문제가 생겨서 무한 로딩상태였다.

트러블 슈팅(Gradle 관련)

로그를 확인해보니 Gradle Setup 단계에서 “The operation was canceled” 에러가 발생했다.

Run gradle/actions/setup-gradle@v3
...
Restore Gradle state from cache
Error: The operation was canceled.

Setup Gradle이라는 이름의 액션에
gradle/actions/setup-gradle@v3 을 사용하고 있었는데,
gradle을 직접 커맨드라인에서 실행하도록 수정했다. 아래처럼 순서대로 명령어만 사용했다.

- name: Make gradlew executable
  run: chmod +x ./gradlew

- name: Build with Gradle
  run: ./gradlew clean build --stacktrace

이 부분 때문에 고민을 많이 했는데, GPT에게 물어봐서 해결했다..

gradle/actions/setup-gradle

  • Gradle 환경 세팅과 캐싱을 자동으로 해준다.
  • 그러나, 내부에서 네트워크 문제, 캐시 복원 문제, 혹은 환경 문제가 생기면 실패할 수 있다.

./gradlew를 직접 실행

  • Gradle Wrapper가 이미 repo 안에 포함되어 있다고 가정하기 때문에,
  • 별도의 환경 설정 없이도 gradle 빌드가 가능하고,
  • 네트워크나 캐시 이슈로부터 자유롭고,
  • 단순 명령 실행이라 에러 발생 지점이 명확하다

그래서 yml 파일을 이처럼 수정하였고, 이후 push를 진행했을 때 CI/CD가 정상적으로 진행되었다.

profile
더 성장하자.

0개의 댓글