기술 · 실용 가이드
Docker bind mount가 ‘not a directory’? 양쪽 유형부터 증명하세요
컨테이너 재생성이나 데이터 삭제 전에 daemon 호스트 source, Compose 기준 경로, 이미지 destination을 감사하세요.

Docker의 ‘not a directory’는 전부 재생성하라는 뜻이 아니라 파일과 디렉터리 유형 불일치입니다. daemon이 없는 source를 디렉터리로 만든 경우도 있습니다.
mount 선언을 고정하고 daemon 호스트 source, 이미지 destination, 실제 Mounts 순으로 확인하세요.
선언과 daemon 환경 고정
전체 오류, 원래 명령, 모든 -f, 프로젝트 디렉터리, env 파일을 저장하고 docker compose config로 병합된 mount를 확인하세요.
docker context show와 docker info를 기록해 실제 daemon 호스트를 찾으세요. 원격 daemon은 client 로컬 경로를 볼 수 없습니다.
daemon 호스트에서 source 유형 증명
source를 절대 경로로 바꾸고 stat으로 link 자체와 대상을 검사해 없음, 파일, 디렉터리, 끊어진 link를 기록하세요.
파일 이름이 디렉터리라면 이전 -v가 source 부재 때 만든 것인지 확인하고 --mount 또는 create_host_path:false를 사용하세요.
Compose 기준 경로부터 해석
여러 파일의 상대 경로는 첫 기준 Compose 파일에서 계산됩니다. 렌더링된 설정과 daemon 파일 시스템을 비교하세요.
환경 변수 전개도 확인하세요. 빈 DATA_DIR가 root 아래로 바꿀 수 있습니다. volume이나 image를 삭제하지 마세요.
이미지 destination 유형 증명
충돌 mount 없이 안전한 임시 container에서 destination과 부모를 stat하세요. startup script가 만들면 같은 초기화 단계에서 확인하세요.
설정 파일은 host file을 먼저 만들고 file에, directory tree는 directory에 mount하세요. layout이 틀렸을 때만 이미지를 고치세요.
한 번만 재생성하고 검증
양쪽 수정 후 해당 container만 재생성하고 Mounts의 Type, Source, Destination, read-only 상태를 확인하세요.
원래 작업을 다시 실행하고 container 안에서 대상을 읽으세요. 계속 실패하면 daemon-host 경로와 image digest를 비교하세요.
