[Spring] AWS EC2, Github Actions, Docker, Nginx를 활용한 무중단 배포 시 에러
트러블슈팅
AWS EC2, Github Actions, Docker, Nginx를 활용한 무중단 배포 시 에러
Trouble Shooting 1.
gradle build 되기 전 권한을 부여하는 스크립트 작성해서 해결한다
1 2 3 4 5 6
# gradlew 스크립트에 실행 권한 부여 - name: gradlew run: | chmod +x ./gradlew # gradle build - name: Build with Gradle run: ./gradlew build -x test
Trouble Shooting 2.
- non-interactive 환경에서 Docker 명령어를 실행하려고 할 때 발생하는 에러
“Error: Cannot perform an interactive login from a non TTY device” 에러를 구글링
AWS CLI 자격증명이 안되어 있다는 것을 알게 되었다!!
참고하면 좋을 블로그를 찾았다
AWSGithub-actions로-ECS를-통해-서비스-배포하기
aws --version
명령어를 통해 AWS CLI 가 최신버전으로 설치되어 있는지 확인 (2.XX.XX)
- aws configure 명령어를 통해 AWS CLI에 사용될 AWS Access Key ID, AWS Secret Access Key 등을 설정한다
- 다시 GitHub Actions 작업을 실행한다
Trouble Shooting 3.
- 도커 이미지를 통해 pull 할 때 다음과 같은 에러가 생긴다면?
- 도커가 실행중인지 확인하기
systemctl status docker
- 실행되고 있지 않으므로 아래의 명령어를 실행한다
- 도커 시작
sudo systemctl start docker
- 도커 설치 확인
docker --version
- root라는 사용자를 도커그룹에 추가 & 권한 설정
sudo usermod -aG docker root
- 도커 재실행
sudo systemctl restart docker
- 도커 실행중인지 확인
systemctl status docker
- 트러블 슈팅 해결!!
- 다시 Nginx 명령어 실행
docker pull nginx
- 도커 컨테이너를 실행한다
docker container run --name nginxserver -d -p 80:80 nginx
Trouble Shooting 4.
- 기존 컨테이너가 있을 경우 아래와 같은 에러 메세지가 발생
- 먼저 아래 명령어로 현재 실행중인 도커 컨테이너 확인한다
docker ps -a
- 기존 컨테이너 제거
docker container rm 4c630c0cbcad
트러블 슈팅 해결!!
- 다시 도커를 해당 컨테이너에 올려서 Nginx를 실행시킨다
docker container run --name nginxserver -d -p 80:80 nginx
Trouble Shooting 5.
- “blue”라는 이름의 Docker 컨테이너를 찾을 수 없어서 발생한 에러
- $service_url 이 green 서버로 설정되어있으므로 첫 시도에는 stop 할 blue 서버가 없어서 에러가 발생한다.
- 다시 배포하면 실행되어 있던 green이 중지되고 blue 서버가 켜지면서 정상적으로 작동하게 된다. 첫 시도에만 발생하는 에러 사항
Trouble Shooting 6.
- 서버가 포트 80에 연결을 거부하는 에러. 이는 서버에서 해당 포트로의 연결이 설정되어 있지 않다는 것을 의미
서버 실행 상태 확인
1
docker ps -a
- Docker 컨테이너 목록을 확인해보니 STATUS가 Exited된 것을 확인함
nginx 컨테이너 재실행
1
docker restart nginxserver
blue 컨테이너 재실행
1
docker restart blue
- 두 컨테이너 모두 정상적으로 재실행된 것을 확인할 수 있다
재시도 해결완료!
Trouble Shooting 7.
- Docker container stop 시에 permission denied 에러
1
Error response from daemon: cannot stop container: 2fe2354f8578: permission denied
- EC2 중지 후 시작했을 때 도커 컨테이너가 삭제가 안되는 경우가 종종 있다.
- 아래의 명령어는 관련 apparmor 를 날려주고 삭제가 된다.
이 때, apparmor는 리눅스의 보안 관련 커널이다.
- 특히 docker 를 snap 으로 설치하면 많은 AppArmor profile 이 쌓이고, 충돌이 날 수 있다.
1
sudo aa-remove-unknown
- 다시 도커 컨테이너 삭제 가능한 것을 확인할 수 있다.
This post is licensed under CC BY 4.0 by the author.