상대 경로 WORKDIR
상대 경로 WORKDIR (WorkdirRelativePath)
빌드 체크 규칙 중 하나로, 같은 Dockerfile에서 절대 경로를 먼저 지정하지 않고 WORKDIR에 상대 경로를 쓴 경우를 알려줘요. 상대 경로는 이전 작업 디렉터리를 기준으로 하므로 베이스 이미지가 바뀌면 예상 밖의 결과가 나올 수 있어요.
출처: 문서
본문
빌드 스테이지에서 WORKDIR을 지정할 때 /build 같은 절대 경로나 ./build 같은 상대 경로를 쓸 수 있어요. 상대 경로를 쓰면 작업 디렉터리는 이전 작업 디렉터리를 기준으로 해요. 그래서 베이스 이미지가 /usr/local/foo를 작업 디렉터리로 쓰고 있다면, 상대 디렉터리인 WORKDIR build를 지정했을 때 실제 작업 디렉터리는 /usr/local/foo/build가 됩니다.
WorkdirRelativePath 빌드 규칙은 같은 Dockerfile에서 절대 경로를 먼저 지정하지 않고 상대 경로로 WORKDIR을 쓰는 경우를 경고해요. 외부에서 만들어진 베이스 이미지의 상대 작업 디렉터리는, 작업 디렉터리가 예고 없이 변경되면 빌드 디렉터리 계층이 완전히 달라져 깨지기 쉽기 때문이에요.
WORKDIR은 셸 확장을 수행하지 않아요. ~나 ~username으로 시작하는 경로는 리터럴 디렉터리 이름으로 취급되고 사용자 홈 디렉터리로 해석되지 않아요.
출력 메시지
Relative workdir 'app/src' can have unexpected results if the base image changes
예시
❌ 나쁜 예: 베이스 이미지의 WORKDIR이 /라고 가정해요(업스트림에서 바뀌면 web 스테이지가 깨집니다).
FROM nginx AS web
WORKDIR usr/share/nginx/html
COPY public .
✅ 좋은 예: 앞에 슬래시를 붙여 WORKDIR이 항상 원하는 경로에 있게 해요.
FROM nginx AS web
WORKDIR /usr/share/nginx/html
COPY public .
더 알아보기
- 빌드 체크 개요: 기타 빌드 체크 규칙을 살펴봐요.
- 빌드 컨텍스트 관련 규칙: 컨텍스트와 관련된 다른 규칙을 확인해요.