728x90
반응형
AWS ec2 인스턴스 위에 Jenkins, Docker를 활용해 Springboot CI/CD 자동화를 진행하던 도중, Docker와 Jenkins 를 처음 사용할때 겪었던 많은 오류와 오랜 시간이 걸려 찾아낸 해결방법을 남겨두고자 한다.
스택은 아래와 같다.
- Java 11
- Springboot
- Docker
- Jenkins
- AWS ec2
1. (젠킨스 빌드 시) 도커 Permission denied 에러
docker logs로 Permission 문제인지 확인해본다.
이때 디렉토리의 권한을 부여해 주어야 한다.
sudo chown 1000 <디렉토리>
2. (젠킨스 빌드 시) 도커 COPY 에러(ARG)
젠킨스로 ec2 인스턴스 위에 Springboot를 배포하려 했을때, 경로를 못찾거나 아래 오류가 나타날 때가 있다.
When using COPY with more than one source file, the destination must be a directory and end with a /
Build step 'Execute shell' marked build as failure
이때, 스프링부트의 Dockerfile의 ARG 부분을 확인해야 한다. 아래와 같이 ARG 부분을 수정한다.
# JAR_FILE 변수에 값을 저장
ARG JAR_FILE=./build/libs/<본인 프로젝트 이름>-0.0.1-SNAPSHOT.jar
3. 도커 Container는 정상 작동되나 url은 접속이 안될때
가장 어려움을 겪었던 오류였다.
sudo docker ps -a로 확인해보니 컨테이너는 정상적으로 실행되고 있으나, ec2 ip 접속시 ip에서 연결을 거부했습니다.라고 뜬다.
이때 아래와 같은 과정을 수행한다.
1. ec2 인바운드 규칙에 해당 포트(위 사진의 경우 8081) 추가해주었는지 확인
2. Dockerfile ENTRYPOINT 아래와 같이 수정 (0.0.0.0:PORT 추가)
# 빌드된 이미지가 run될 때 실행할 명령어
ENTRYPOINT ["java","-jar",<실행할 jar 파일>,"0.0.0.0:8081"]
자료가 많이 없어 찾는데 고생했지만, 이 글을 보는 분들은 빠르게 에러를 해결하길 바란다ㅎㅎ
728x90
반응형