증상
로컬·CI 유닛테스트는 전부 그린인데(레포에 파일이 실재하므로) 배포본에서만 404/400/파일 없음. 같은 유형으로 3회 재발했다.
원인 패턴
라우트가 상대경로(Path("data/x.json"))로 읽는데 그 파일이 이미지에 없다. 근원이 둘로 겹치기도 한다.
.dockerignore가 그 디렉터리를 통째로 제외 — 빌드 컨텍스트에서부터 배제해법
.dockerignore에 ! 재포함test -f /app/data/*.json으로 존재를 실증하고 없으면 잡을 실패시킨다점검 습관
런타임이 읽는 경로를 추가·이동할 때마다 3자 대조: (1) Dockerfile COPY (2) .dockerignore 제외 (3) 라우트 상대경로 vs WORKDIR
검증 요령 (base 이미지를 못 받는 환경에서)
.dockerignore는 base 이미지와 무관하다. FROM scratch로 동일한 COPY만 빌드하면 컨텍스트 포함 여부가 그대로 검증된다 — 제외됐으면 "not found in build context"로 실패한다.
셸 없는 scratch 이미지의 내용을 직접 본다
FROM scratch는 셸이 없어 docker run … ls가 안 된다. 실행하지 않고 꺼낸다: docker create <img> /x → docker cp <cid>:/app/data ./out → ls -la ./out 후 sha256을 레포 원본과 대조한다. 바이트가 같아야 "들어갔다"다.