storage / knowledge

compose에서 NFS volume을 직접 마운트하기

paul 2025.10.09 191words (1m)

NAS의 폴더를 컨테이너에 물리는 방법은 두 가지다. host의 fstab에 올리고 bind mount하거나, compose에서 NFS volume을 바로 만들거나.

yaml
volumes:
  media:
    driver: local
    driver_opts:
      type: "nfs"
      o: "addr=10.10.10.2,ro,nfsvers=4,soft"
      device: ":/mnt/vault/entertainment"

device 앞의 콜론을 빠뜨리기 쉽다. :/mnt/... 형태여야 한다.

host 마운트와 나눠 쓰는 기준

컨테이너 하나만 쓰는 것이면 compose 쪽이 낫다. 어떤 서비스가 NAS의 어디를 보는지가 compose 파일 안에 다 적혀 있다. 컨테이너를 옮기면 volume 정의도 같이 간다. host의 fstab을 건드릴 필요가 없다.

여러 컨테이너가 같은 경로를 공유하거나 host에서도 그 폴더를 봐야 하면 fstab 쪽이 낫다.

soft를 쓴 이유

fstab에는 hard 를 썼는데 여기서는 soft 다. 이유가 다르다.

hard 는 NAS가 응답하지 않으면 무한히 기다린다. 안전하지만 그 사이 프로세스가 D 상태로 묶인다. 컨테이너 하나가 이렇게 되면 컨테이너를 죽이지도 못하는 상태가 되고, 심하면 docker 데몬까지 영향을 받는다.

soft 면 타임아웃 후 에러를 반환한다. 그 서비스만 멈추고 머신 전체는 계속 돈다. 읽기 전용으로 미디어를 읽는 용도라 중간에 에러가 나도 파일이 깨질 일이 없다. 그래서 여기서는 soft 가 맞다.

ro 를 같이 준 것도 같은 맥락이다. 쓰기가 없으면 soft 의 위험이 사라진다. 쓰기가 필요한 볼륨이라면 hard 로 두고 host 쪽에 마운트하는 편이 낫다.