DevOps

[문제 해결] Dockerfile에서 tar 명령어 실행 안 될 때 해결 방법

우잉~ 2024. 12. 13. 16:19

문제 상황

Dockerfile을 작성하여 amazon linux 2 이미지에 tomcat 패키지를 다운로드하고 압축 해제하려고 했었다.

이미지를 빌드할 때 tar 명령어를 실행하는 라인에서 에러가 발생하면서 이미지를 빌드할 수 없는 상황이 발생했다.

# Dockerfile

FROM amazonlinux:2
RUN yum install java-17-amazon-corretto -y
RUN mkdir /opt/tomcat
WORKDIR /opt/tomcat
RUN yum install -y tar
ADD https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tomcat-9.0.98.tar.gz .
RUN tar -xvzf apache-tomcat-9.0.98.tar.gz
RUN mv apache-tomcat-9.0.98/* /opt/tomcat
EXPOSE 8080
CMD ["/opt/tomcat/bin/catalina.sh", "run"]

 

에러 발생,,,

 

ADD 명령어에 대해서 알아보니 자동으로 압축 파일을 해제해준다고 하길래 tar 명령어 라인을 지워봤지만, 디렉터리를 찾을 수 없다면서 또 에러가 발생하였다...

 

 

문제 해결

 

ADD 명령어는 압축파일을 컨테이너 내로 가져올 때는 자동으로 압축 해제하는 것이 맞지만, 로컬 파일에 대해서만 해당된다고 한다.

외부 URL로 가져오는 패키지의 경우 다운로드만 하게 되는데, 이때문에 꼭 tar 명령을 이용하여 압축을 해제해야 한다.

그리고 또 현재 사용하려는 이미지(amazonlinux:2)에서 tar 명령어가 없기 때문에 에러가 생긴 것이기 때문에 압축 파일을 해제하기 전에 tar 패키지를 설치하는 RUN yum install -y tar 명령어를 추가해줌으로써 해결했다.

 

Dockerfile 수정

 

다행스럽게도 설치가 아주 잘 됐고 ㅠㅠ 이미지도 생성된 것을 확인할 수 있었다. 정말 다행이다...

이미지 빌드 완료

 

이미지 생성 확인

 

정리

  1. ADD 명령어는 로컬 파일에 존재하는 압축 파일에 대해서만 자동으로 압축을 해제해준다.
  2. ADD 명령어를 외부 URL을 이용하여 사용할 경우에는 다운로드만 진행한다. → tar 명령어 사용해야 함!
  3. tar 명령어가 실행되지 않는다면 직접 tar 패키지를 설치해야 한다.