ETC/Tool

[Docker] 도커 에러 archive/tar: unknown file mode

깜냠미 2025. 4. 9. 04:09
728x90
반응형
failed to solve: archive/tar: unknown file mode ?rwxr-xr-x

Windows와 Linux/Unix 시스템 간의 파일 권한 처리 방식 차이 때문에 발생하는 문제입니다.

주요 원인 → 운영체제 차이

  • Windows: 파일 권한을 ACL(Access Control List)로 관리
  • Linux/Unix: 파일 권한을 rwx(읽기/쓰기/실행) 형식으로 관리
  • Docker는 Linux 기반이라 Linux 스타일의 권한 체계를 사용
# Copy application code with explicit permissions  

# 방법 1: Dockerfile에서 명시적 권한 설정  
COPY --chmod=755 /app /app  

# 방법 2: 복사 후 권한 변경  
COPY . .  
RUN chmod -R 755 /app  

# 방법 3: 특정 사용자로 실행 (UID 변경)
USER 1000
  • COPY 명령어에 --chmod=755 옵션을 추가하여 명시적으로 파일 권한을 설정
  • 추가로 권한 문제를 방지하기 위해 전체 애플리케이션 디렉토리에 대해 권한을 설정
  • 보안을 위해 on-root 유저로 실행하도록 설정
더보기
  • --chmod=755 옵션?
    파일이나 디렉토리의 권한을 소유자에게는 모두, 그룹과 기타 사용자에게는 읽기와 실행만 허용하도록 설정
  • 1번과 2번 차이?
    • 1번 : 애플리케이션 복사할 때 복사 시점에 파일과 폴더 권한을 755로 즉시 지정한다.
      별도의 RUN 명령어가 없어 추가 레이어가 생성되지 않아 이미지 용량과 빌드 속도 측면에서 효율적이다.
    • 2번 : 먼저 파일을 복사한 후, 권한 변경을 위한 RUN 명령어가 실행되어 복사 이후에 권한이 재설정된다.
      RUN 명령어는 추가적인 Docker 레이어를 만들어 빌드 속도나 이미지 크기에 영향을 줄 수 있다.
      권한 변경 작업을 더 세밀하게 조정하거나 예외 처리를 할 수 있는 유연성이 있다.
    • 1번은 간단하고 효율적인 권한 지정에 적합하고, 2번은 복잡한 권한 설정이 필요할 때 유리
  • USER 1000인 이유?
    리눅스 계열 운영체제는 첫 번째로 생성되는 일반 계정(예: 설치 시 입력한 사용자)의 UID를 1000으로 자동 할당

Windows에서 Docker를 사용할 때는 WSL2를 사용하는 것이 권한 문제를 피하는 가장 좋은 방법

  • Windows에서 Docker를 사용할 때는 WSL2를 사용하는 것이 권한 문제를 피하는 가장 좋은 방법
  • WSL2는 리눅스 파일시스템을 사용하므로 권한 관련 문제가 거의 발생하지 않음