storage / knowledge
container와 host의 UID/GID 맞추기
NFS로 붙인 폴더를 host와 container가 같이 쓴다. 여기서 권한이 꼬이는 이유는 하나다. NFS는 이름이 아니라 번호로 소유자를 판단한다.
container 안의 appuser 가 UID 1000이고 NAS 쪽 파일의 소유자가 UID 1001이면, 이름이 뭐든 남의 파일이다. container마다 UID가 제각각이면 어떤 건 되고 어떤 건 안 되는 상태가 된다.
번호를 하나로 고정했다.
$ sudo groupadd -g 2000 dockeruser
$ sudo useradd -u 2000 -g 2000 -m -s /bin/bash dockeruser
$ sudo usermod -aG docker dockeruser
UID와 GID를 둘 다 2000으로 명시한다. -u 와 -g 없이 만들면 시스템이 알아서 번호를 주는데, 그러면 다른 기계에서 같은 절차를 밟아도 다른 번호가 나온다.
2000번대를 쓴 건 NAS 쪽에서 서비스 계정을 2000번대로 잡아뒀기 때문이다. 사람 계정은 1000번대, 서비스는 2000번대로 나누면 번호만 보고 구분이 된다.
usermod -aG docker 로 docker 그룹에 넣어 sudo 없이 docker를 쓸 수 있게 했다.
container 쪽
compose에서 user: "2000:2000" 을 주거나, 이미지가 PUID / PGID 를 받으면 거기에 2000을 넣는다. NAS의 dataset 권한도 이 번호를 기준으로 잡는다.
번호가 세 군데(NAS, host, container)에서 같아야 한다. 한 군데만 어긋나도 파일은 보이는데 못 쓰는 상태가 된다.