답변:
LXC 문서 에 따르면 권한있는 컨테이너를 통해이를 수행 할 수 있습니다.
lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
lxd
이 답변에 사용 된 liblxc (기본 라이브러리) 또는 LXD 클라이언트 (이름이 지정된 ) 또는 LXC ( lxc-*
이름 이 지정된 도구가 있는 소프트웨어 및 "이전"툴셋 ) 또는 프로젝트 (여기서 LXC)를 참조하는 데 사용할 수 있습니다. LinuX 컨테이너의 약자). 이것이 제가 Unix.SE 메타 에서이 질문 을 한 이유 입니다.
openSUSE 위키에서 기사를 찾았습니다 : https://en.opensuse.org/User:Tsu2/LXC_mount_shared_directory
나는 단계를 밟았으며 지금은 효과가 있습니다.
호스트 디렉토리를 작성하십시오.
mkdir /media/data/share && chmod 7777 /media/data/share
lxc 컨테이너에 디렉토리를 만듭니다 :
mkdir /share
호스트에서 lxc 구성 파일을 편집하십시오.
nano /var/lib/lxc/containername/config
lxc.mount.entry = /media/data/share share none ro,bind 0.0
share
에서 사용되는 상대 경로 lxc.mount.entry
는 매우 중요합니다.
아래는 호스트 디렉토리 중 하나를 컨테이너에 마운트하기 위해 수행 한 작업입니다. 우리가 달성하고 싶기 때문에 이것은 소리보다 까다 롭습니다.
다양한 기사를 온라인으로 읽은 후 (가장 유용한 기사는 이 github 문제입니다 ) 다음은이를 해결하는 방법입니다. 트릭은 호스트 사용자의 uid와 gid를 컨테이너 내 사용자의 uid와 gid에 매핑하는 것입니다.
/home/breakds/projects
컨테이너의 동일한 위치에 마운트한다고 가정 해보십시오 . 외부 디렉토리는 breakds
uid와 gid가 있는 사용자가 소유합니다 1000
.
그런 다음 컨테이너라는 사용자를 만들었습니다. debian
그의 uid와 gid도 1000
루트 사용자가 아니기 때문에 발생했습니다. 그런 다음 호스트에서 (lxc) 프로파일을 작성합니다.
lxc profile edit breakds
그리고 아래는 프로파일의 내용입니다 (yaml 형식이라고 생각합니다).
name: breakds
config:
raw.lxc: |
lxc.id_map =
lxc.id_map = u 0 165536 999
lxc.id_map = g 0 165536 999
lxc.id_map = u 1000 1000 1
lxc.id_map = g 1000 1000 1
lxc.id_map = u 1001 166537 64535
lxc.id_map = g 1001 166537 64535
user.vendor-data: |
packages:
- bash
description: allow home dir mounting for breakds
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
projects:
path: /home/breakds/projects
source: /home/debian/projects
type: disk
그런 다음이 프로파일을 해당 컨테이너에 영구적으로 적용하십시오.
$ lxc profile apply <my container> breakds
이것은 트릭을해야합니다.
참고 :이 프로파일로 전환하기 전에 소유자 / 그룹이 debian 인 모든 디렉토리 나 파일을 삭제해야합니다 (그리고 전환 후에 다시 생성해야 함). 이는 uid 및 gid 매핑 후 소유권이 유효하지 않기 때문입니다. 원래 1000 ~ 1000을 매핑 한 이후로 모든 것이 잘되어야한다고 생각했지만 여기에 뭔가 빠진 것으로 생각되며 해킹 없이이 문제를 해결하는 방법에 대한 조언을 얻을 수 있다면 좋을 것입니다.
chown
호스트에서 할 수 있습니다 .
LXC 구성 파일을 직접 편집하여 LXD없이이 작업을 수행 할 수도 있습니다.
# Container specific configuration
lxc.idmap = u 0 165536 1000
lxc.idmap = g 0 165536 1000
lxc.idmap = u 1000 1000 1
lxc.idmap = g 1000 1000 1
lxc.idmap = u 1001 166536 64535
lxc.idmap = g 1001 166536 64535
또한 / etc / subuid 및 / etc / subgid를 편집하여 컨테이너의 사용자 계정에 호스트의 uid / gid 1000에 매핑 할 수있는 권한이 부여되어 있는지 확인해야합니다.
containeruser:165536:65536
containeruser:1000:1