Post

[Spring] AWS EC2, Github Actions, Docker, Nginx를 활용한 무중단 배포 시 에러

트러블슈팅

AWS EC2, Github Actions, Docker, Nginx를 활용한 무중단 배포 시 에러

Trouble Shooting 1.

  • ./gradlew 스크립트에 실행 권한이 없어서 발생하는 에러 image

  • 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 명령어를 실행하려고 할 때 발생하는 에러

image

  • “Error: Cannot perform an interactive login from a non TTY device” 에러를 구글링

  • AWS CLI 자격증명이 안되어 있다는 것을 알게 되었다!!

  • 참고하면 좋을 블로그를 찾았다

AWSGithub-actions로-ECS를-통해-서비스-배포하기

  • aws --version 명령어를 통해 AWS CLI 가 최신버전으로 설치되어 있는지 확인 (2.XX.XX)

image

  • aws configure 명령어를 통해 AWS CLI에 사용될 AWS Access Key ID, AWS Secret Access Key 등을 설정한다

image

  • 다시 GitHub Actions 작업을 실행한다

Trouble Shooting 3.

  • 도커 이미지를 통해 pull 할 때 다음과 같은 에러가 생긴다면?

image

  • 도커가 실행중인지 확인하기

systemctl status docker

image

  • 실행되고 있지 않으므로 아래의 명령어를 실행한다
  • 도커 시작sudo systemctl start docker
  • 도커 설치 확인 docker --version

image

  • root라는 사용자를 도커그룹에 추가 & 권한 설정 sudo usermod -aG docker root
  • 도커 재실행sudo systemctl restart docker
  • 도커 실행중인지 확인systemctl status docker

image

  • 트러블 슈팅 해결!!
  • 다시 Nginx 명령어 실행

docker pull nginx

image

  • 도커 컨테이너를 실행한다

docker container run --name nginxserver -d -p 80:80 nginx

Trouble Shooting 4.

  • 기존 컨테이너가 있을 경우 아래와 같은 에러 메세지가 발생

image

  • 먼저 아래 명령어로 현재 실행중인 도커 컨테이너 확인한다

docker ps -a

  • 기존 컨테이너 제거

docker container rm 4c630c0cbcad

image

트러블 슈팅 해결!!

  • 다시 도커를 해당 컨테이너에 올려서 Nginx를 실행시킨다

docker container run --name nginxserver -d -p 80:80 nginx

image

Trouble Shooting 5.

image

  • “blue”라는 이름의 Docker 컨테이너를 찾을 수 없어서 발생한 에러
  • $service_url 이 green 서버로 설정되어있으므로 첫 시도에는 stop 할 blue 서버가 없어서 에러가 발생한다.
  • 다시 배포하면 실행되어 있던 green이 중지되고 blue 서버가 켜지면서 정상적으로 작동하게 된다. 첫 시도에만 발생하는 에러 사항

image

Trouble Shooting 6.

  • 서버가 포트 80에 연결을 거부하는 에러. 이는 서버에서 해당 포트로의 연결이 설정되어 있지 않다는 것을 의미

Untitled

서버 실행 상태 확인

1
docker ps -a

image

  • Docker 컨테이너 목록을 확인해보니 STATUS가 Exited된 것을 확인함

nginx 컨테이너 재실행

1
docker restart nginxserver    

image

blue 컨테이너 재실행

1
docker restart blue

image

  • 두 컨테이너 모두 정상적으로 재실행된 것을 확인할 수 있다

image

재시도 해결완료!

image

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      

image

  • 다시 도커 컨테이너 삭제 가능한 것을 확인할 수 있다.

image

This post is licensed under CC BY 4.0 by the author.