LXC / LXD 컨테이너에 공유 호스트 디렉토리 추가 해왔으며 모두 훌륭하게 작동합니다. Virtualbox를

우분투 14.04에서 LXC / LXD를 실험 해왔으며 모두 훌륭하게 작동합니다. Virtualbox를 한 번에 모두 버릴 수 있도록 호스트 컴퓨터와 컨테이너 사이에서 공유 디렉토리를 작동시키는 방법을 알아야합니다.

이 페이지를 보았습니다 : https://wiki.gentoo.org/wiki/LXD

어느 지시 사항을 제공하지만 오류가 계속 발생합니다.

누구 든지이 작업을 수행하기위한 간단하고 명확한 지침을 알고 있습니까? 도움을 주시면 감사하겠습니다.



답변

언급 한 https://wiki.gentoo.org/wiki/LXD 의 지침 은 정확하지만 약간 더 자세한 설명이 필요할 수 있습니다.

호스트에서 먼저 컨테이너 데이터가 저장된 디렉토리의 소유권을 확인하십시오. 운영

sudo ls -l /var/lib/lxd/containers

디렉토리를 공유하려는 컨테이너의 소유자를 확인하십시오. 내 경우에서 uidgid모두 100,000이었다.

다음을 사용하여 공유하려는 디렉토리의 소유권을 변경하십시오.

sudo chown 100000:100000 /tmp/share_on_host

주석에 표시된 방식으로 컨테이너와 디렉토리를 공유하십시오.

lxc config device add mycontainer sharedtmp disk \
                  path=/tmp/share_on_guest source=/tmp/share_on_host

이제 컨테이너에서 디렉토리가 /tmp/share_on_guest( /tmp다른 것들을 위해 시스템에서 사용하고 특별한 권한을 가지고 있기 때문에 디렉토리를 마운트하지 않는 것이 좋습니다) 루트가 소유하고 있음을 알 수 있습니다. 여기에서 chown컨테이너에서 사용하여 소유권을 컨테이너의 적절한 사용자 uidgid사용자 로 변경할 수 있습니다 .

참고로 컨테이너의 소유권을 예를 들어 uid33 명의 사용자로 변경 한 후에 는 호스트에 uid100033이 있음을 알 수 있습니다.


답변

이 질문에 대한 업데이트 된 답변입니다.

컨테이너 /var/www와 같이 호스트 폴더 를 마운트하십시오 /var/test.

lxc config device add mycontainer vartest disk source=/var/www path=/var/test

답변

컨테이너에 추가 장치 를 할당 할 수 있으며 이러한 장치는 호스트 액세스 가능 폴더 일 수 있습니다.

$ lxc config ## display help
...
lxc config device add [<remote>:]<container> <device> <type> [key=value...]
    Add a device to a container.
...

참고 <device> 다음 장치 관리를위한 ID로 사용됩니다 당신이 할당하는 것이 단지 임의의 이름입니다.

예를 들어, 컨테이너에 호스트 폴더 “./host”를 “/ mnt / host”로 마운트하려면 …

lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host

한 가지 문제가 남아있다 -이 폴더는 호스트와 용기 모두 쓰기 권한을하려는 경우, 소유권과 권한이 적절하게 구성해야합니다. 이는 사용자 및 그룹 id값 의 숫자 범위를 가상화하는 LXD의 기본 모드로 인해 복잡 합니다. 그러나 쉬운 해결책 이 있습니다. 호스트와 동등한 권한으로 실행되도록 컨테이너를 구성 하여이 가상화를 우회하십시오 …

lxc config set <container> security.privileged true

이 접근 방식의 전체 호스트 보안 영향은 현재 명확하지 않지만 가상화에 의해 다소 “포함 된”것 같습니다. 실제 위험은 컨테이너를 어떻게 어떻게 사용할 지에 달려 있습니다. 기술 노트 참조https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers 참조

또한이 접근 방식은 일반적으로 컨테이너에서 루트가 아닌 사용자로 컨테이너에서 작업하는 경우 가장 효과적입니다.

lxc exec zesty -- su --login ubuntu

답변

ph0t0nix탁월한 답변을 바탕으로 Ubuntu 18.04 서버에 대해 다음과 같은 단계별 접근 방식을 제안합니다.

  1. 호스트에서 rootfs 소유자의 UID를 결정하십시오.

    sudo ls -l /var/lib/lxd/storage-pools/lxd/containers/webserver/rootfs
    id -u root    100000
  2. 컨테이너에서 우분투의 UID를 결정하십시오 (즉 컨테이너의 사용자).

    id -u ubuntu    1000
  3. 호스트에서 공유 폴더를 작성하고 컨테이너에 추가하십시오.

    lxc config device add webserver mydevicename disk path=/home/share_on_guest source=/home/share_on_host
  4. 공유 폴더의 호스트 UID에서 조정합니다 (UID = UID 호스트 + UID 게스트).

    sudo chown 101000:101000 /home/share_on_host
  5. 게스트 (사용자 우분투)는 이제 공유 폴더에 액세스 할 수 있으며 컨테이너 액세스 내에서을 사용하여 공유 폴더에 대한 액세스를 조정할 수 있습니다 chmod.


답변

이제 컨테이너와 호스트에서 UID와 GID 간의 매핑을 처리하기 위해 LXD 프로필을 사용하여이 문제에 대한 안전하고 효과적인 솔루션을 얻었습니다.

매우 유용한 요지가 여기에 있습니다.

https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8