빌드 중 RUN mkdir /opt/data-processing/conf && chown -R 1000:1000 ... 에서 permission denied 가 난다. Dockerfile 을 보면 USER scmops 뒤에 RUN 이 있어 명령이 root 가 아닌 scmops 로 실행된다. scmops 가 상위 디렉터리에 쓰기 권한이 없으면 mkdir 이 실패하고, 설령 성공해도 chown 은 root 권한이 필요해 거부된다.
권한 작업(mkdir · chown · chmod) 을 모두 root 단계에 모으고 USER 전환은 마지막에 둔다.
FROM ${REGISTRY_ADDRESS}/${PROJECT}/dataprocessing-base:latest
USER root
COPY --chown=1000:1000 app /opt/data-processing/app
COPY --chown=1000:1000 build/scripts/entrypoint.sh /opt/data-processing/entrypoint.sh
RUN mkdir -p /opt/data-processing/conf \
&& chown -R 1000:1000 /opt/data-processing /opt/apps/data-processing \
&& chmod 755 /opt/data-processing/entrypoint.sh
USER scmops
mkdir -p 를 쓰면 디렉터리가 이미 있어도 재빌드가 실패하지 않는다. 같은 COPY 가 파일 끝에 중복돼 있으면 제거한다. 베이스 이미지에서 /opt/data-processing/ 의 소유자가 이미 1000 이면 root 전환 없이도 되지만, chown 이 필요하면 root 단계에서 처리하는 것이 정석이다.