synology docker 에서 다른 볼륨의 파일을 바인드하는 방법

docker 컨테이너는 기본적으로 휘발성입니다. 컨테이너의 데이터들은 컨테이너가 삭제되면 사라지게 되죠. 영속성이 필요한 데이터는 보통 볼륨이나 바인드를 통해 외부화시키게 됩니다.

docker 볼륨 바인드

$ docker run ... -v host_dir:container_dir docker_images command

이렇게 -v 옵션으로 호스트 디렉토리(파일)을 도커 컨테이너로 연결해줄 수 있습니다. (현재의 가이드는 -v 옵션 보다는 –mount 옵션을 권장한다고 합니다.)
시놀로지에서는 도커의 컨테이너 편집으로 볼륨 바인드를 추가해줄 수 있습니다.

컨테이너에서 사용하는 파일시스템은 도커 외부에 있게 되므로 Permission Denied 등 권한 문제가 종종 발생하기도 합니다.

이때는 보통 도커에서 UID, PID를 가져와 해당 디렉토리(파일)의 권한을 바꿔주는 방식으로 해결합니다.

user@docker_host$ docker run --rm -it docker_image bash
docker_user@container_id$ id
uid=1000 gid=100 groups=100
docker_user@container_id$ exit

컨테이너 자동 삭제(–rm) 옵션을 주고 이미지를 실행합니다. 컨테이너에 들어오면 id 명령어를 통해 UID와 GID를 확인합니다. 찾아온 UID, GID로 바인드하려는 디렉토리를 바꿔줍니다.

user@docker_host$ chown -R 1000:100 host_dir

다시 컨테이너를 실행하면 정상적으로 바인드가 됩니다. 왠만하면 이 단계에서 문제가 해결됩니다.
하지만 시놀로지에서 도커가 설치된 볼륨이 아닌 다른 볼륨의 디렉토리를 바인드하려면 한 단계가 더 필요합니다. 도커의 빠른 실행을 위해 SSD에 설치해 놨는데 필요한 컨테이너는 저장소도 많이 차지하고 그렇게 중요하거나 빠른 접근이 필요한 것도 아니라서 HDD에 저장하려고 하면 이런 문제를 만나게 됩니다.

synology 권한 조정

  1. 우선 바인드하려는 디렉토리를 시놀로지 File Station에서 찾아서 선택합니다.
  2. File Station의 메뉴에서 작업 -> 속성 을 선택합니다.
  3. 소유자 ID를 확인합니다. 위에서 chown으로 변경해준 UID가 맞는지 확인합니다.
  4. 권한 탭을 확인해보면 Owner가 빠져 있습니다. Owner의 권한을 생성하고 읽기/쓰기를 추가해줍니다.

  5. 다시 컨테이너를 실행하면 정상적으로 처리가 됩니다.

synology 의 특징

문제가 발생하는 원인은 Owner 권한이 빠져 있는 부분인 걸로 보입니다. 보통 시놀로지에서 공유 폴더에 디렉토리를 만들게 되면 사용자(시놀로지 유저)의 권한이 기본 설정됩니다. 도커 바인드를 위해 쉘에서 오너를 변경하게 되면 시놀로지의 권한이 사라지는 것 같습니다. 시놀로지 파일 시스템의 특징이거나 권한 시스템으로 인한 것으로 보입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다