· 톺아보기

잡담

docker에서 shared 볼륨 매핑

이치로 · · 수정

조회 11,298 · 공감 0 · 댓글 11


컨테이너 안에서 plexdrive나 rclone mount와 같이 unionfs/mergerfs 등 fuse mount 관련 커맨드를 마운트 포인트 /data로 수행했다고 가정합니다. 이제 컨테이너 안에서는 마운트 한 내용이 /data에서 잘 보입니다. 


컨테이너 안에서만 쓸거면 모르지만 다른 컨테이너와 데이터를 주고 받거나 (예를 들면 docker-plexdrive를 올리고 그 폴더에 대해서 docker-plex를 올린다거나) 호스트에서 가져다 쓰려면 shared mount가 필요합니다.


docker run -d \
    --name=test_cont \
    ... \
    -v /path/on/host:/data:shared \
    ... \
    owner/repo:tag

마지막에 :shared라고 명시해주면 컨테이너 내부의 /data에 마운트한 내용이 호스트의 /path/on/host에서도 잘 보입니다. 


시놀로지나 맥에서는 이게 잘 안되는걸로 아는데 (shared를 붙이면 에러나죠)


sudo mount --make-shared /volume1


이런식으로 /volume1 아래의 서브트리에 대해서 shared로 만들어주면 됩니다. 저 폴더는 사용자에 따라 /volum2가 될 수도 있고 /mnt가 될 수도 있고 그러합니다.


그런 다음 -v /path/on/host:/data:shared가 적용된 컨테이너를 올려보면 잘 돌아갈겁니다.


문제는 이게 재부팅하면 다시 해줘야하네요.

아마 fstab 같은데서 처음 마운트될때 옵션을 줘야하는 것 같은데 더이상 건드리기는 위험해 보여서...

혹시 아시는 분은 제보 부탁합니다.




p.s. 시놀 도커 패키지 수정버전 올라왔네요.



댓글 11

  1. __ei ·
    하이퍼v에서 헤놀로지 5.2 돌리고 있습니다.
    일단 sudo 명령이 없는데 그냥 루트로 로그인해서 mount --make-shared 명령 실행하면 사용중이라고 에러메세지가 나옵니다. umount도 사용중이라며 안되고.. 방법이 있을까요?

    자답입니다.
    위의 명령 대신에
    mount -o shared /volume1
    명령을 사용하니 되네요.

    추가
    mount -o shared 명령은 실행 되지만 여전히 도커에서 -v /host:/container:shared 명령으로 실행하면 에러가 나네요.
  2. 이치로 ·
    rshared라고 해야 된다고도 하고...제가 테스트할때는 shared로 되었는데. 뭐가 다른지 모르겠습니다.
  3. __ei ·
    @이치로님 rshared 도 해봤는데 똑같더라고요. 흠...
  4. 이치로 ·
    @__ei님 그럼 헤놀5.2의 docker 버전이 낮아서?... fuse 버전이 낮아서? 로 추측해봅니다.
  5. 해를쏘다 ·
    댓글 이미지
    esxi에서 헤놀로지 6.1.7 사용중입니다. 이치로님 plexdrive 도커를 위에서 알려주신 명령어로 마운트하는데 성공했는데,
    문제는 마운트한 폴더 조회는 가능한데 수정 권한이 없다고 나옵니다. 마운트한 폴더에 영화를 추가하면 rw 가능한 폴더에 해당 영화가 복사되고, 그 폴더를 나중에 rclone으로 업로드하려는 계획인데.. 잘 안됩니다.
    첨부한 그림에서 Media 폴더가 제가 마운트한 것이고, 아랫 부분은 마운트 해제했을때 파일 권한 변화 모습입니다.

    컨테이너 생성할때 다른 명령어를 주어야 하나요? 제가 사용한 명령은 다음과 같습니다.

    docker run -d --name=plexdrive --restart=always --privileged --net=bridge -v /volume1/docker/plexdrive/config:/config -v /volume1/GoogleDrive/Media:/data:shared -v /volume2/Media:/ufs --device=/dev/fuse --cap-add=MKNOD --cap-add=SYS_ADMIN -e PUID=1026 -e PGID=100 -e RUN_OPTS="--chunk-check-threads=8 --chunk-load-ahead=16 --chunk-load-threads=16 --max-chunks=512 --chunk-size=1M --refresh-interval=1m" wiserain/plexdrive:5.0.0-unionfs
  6. 이치로 ·
    @해를쏘다님 아래 마운트한 폴더 기준으로 다시 한번 문제를 설명해주세요. 지금 쓰신것 기준으로는 /volume1/GoogleDrive/Media는 /volume2/Media와 plexdrive가 내부적으로 마운트한 것(이하 /plexdrive)의 union이 됩니다.

    /volume1/GoogleDrive/Media = /volume2/Media + /plexdrive

    /volume2/Media는 읽고쓰기가능 plexdrive는 읽기전용입니다. 어느 폴더에 수정권한이 없다고 나오고 뭐가 어떻게 안된다는 것인지 모르겠습니다.
  7. 해를쏘다 ·
    a=plexdrive:ro
    b=/volume2/Media:rw
    ab(union)=/volume1/GoogleDrive/Media
    저는 ab 폴더에 파일을 카피하면 rw인 b폴더에 실제 파일이 카피되는 걸로 알고 있었습니다.
    그래서 ab를 플렉스 라이브러리로 등록하고 영화를 추가하기 위해 ab에 영화를 카피하고자 하였습니다.
    그런데 카피가 되지 않고 오류가 발생해서 ab에 대한 퍼미션을 확인해보니 위의 그림과 같았고 이 상태로는 ab에 카피가 되지 않을거라 판단하였습니다.

    그래서 b에다 영화를 카피하면 ab에 반영되고 플렉스 서버에서 영화가 추가되지 않을까 하여 b에 영화를 카피했습니다. 결론적으로는 ab에도 영화 추가 반영되었으나 플렉스 서버에서는 영화가 자동으로 추가되지 않았고 수동으로 업데이트 해야 인식되었습니다.

    개인적으로는 ab에 영화 카피가 된다면 플렉스 서버에서 영화가 등록될 때 라이브러리 추가가 자동적으로 되지 않을까 하는 생각이 들어서 ab에 카피 가능하도록 퍼미션 수정 방법을 찾고 있는 상황입니다.
  8. 이치로 ·
    @해를쏘다님 이해하신바가 맞습니다. 권한이 왜 그런지는 모르겠네요. 저 폴더 /volume1/GoogleDrive/Media:/data는 PUID와 PGID에만 영향을 받을텐데 말입니다. 마운트 전에는 user:group이다가 마운트 후에는 root:root로 바뀐다는 말이지요? docker container log는 어떤가요?
  9. 해를쏘다 ·
    마운트 전에 ab 폴더는 root:root이고 drwxrwxrwx인데 마운트 후에 user:group으로 바뀌고 d--------- 입니다. 헤놀 도커 로그에는 에러표시는 보이지 않습니다.
    plexdrive 컨테이너 실행시 제 id 검색해서 -e PUID=1026 -e PGID=100을 줬는데 이게 문제이려나요.
  10. 이치로 ·
    @해를쏘다님 퍼미션 나온게 좀 이상하긴하네요... 제가 시놀/헤놀에서는 써보질 않아서 어떤 문제인지 더이상 짐작가는바는 없습니다. 새글을 올려서 다른 분들의 피드백을 받아보시는게 어떤지요.
  11. 해를쏘다 ·
    바쁘실텐데 신경써주셔서 감사드립니다. 아직 나린이라 공부할게 많다는걸 느낍니다. 좀 더 알아봐야겠네요^^

나스당 최근 글

나스당 목록 더 보기