LXC : 호스트에서 컨테이너로 폴더를 어떻게 마운트합니까?


24

호스트의 폴더를 LXC 컨테이너에 마운트하려고합니다.

호스트에는 폴더가 /mnt/ssd/solr_data생성되었습니다 (현재 루트 파일 시스템에 있지만 나중에 SSD 드라이브를 마운트하므로 준비하고 있습니다).

/data컨테이너에서와 같이 폴더를 마운트하고 싶습니다 .

컨테이너 fstab 파일에는 다음이 있습니다.

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        ext4    defaults,noatime        0       0

그러나 그것은 끝이 없습니다. 컨테이너를 시작할 때이 오류가 발생합니다.

lxc-start: No such file or directory - failed to mount '/mnt/ssd/solr_data' on '/usr/lib/x86_64-linux-gnu/lxc//data'
lxc-start: failed to setup the mounts for 'Solr4StandAlone'
lxc-start: failed to setup the container
lxc-start: invalid sequence number 1. expected 2
lxc-start: failed to spawn 'Solr4StandAlone'

답변:


16

컨테이너에 디렉토리를 자동으로 만들려면 create=dirfstab에 옵션을 추가 할 수도 있습니다 .

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind,create=dir

편집 : 이것은 LXC에만 해당됩니다. 이 스레드를 참조하십시오

우리가 이미 "선택적"을 가지고있는 것처럼, 이것은 두개의 새로운 LXC 특정 마운트 플래그를 추가합니다 :

  • create = dir (경로에서 mkdir_p를 수행함)

  • create = file (디렉토리에서 mkdir_p를 수행하고 경로에서 fopen을 수행합니다)

이것은 권한이없는 컨테이너에 필요한 바인드 마운트 중 일부에 의해 동기가 부여되었습니다.


1
어떤 버전 mount이 적용됩니까? mount(8)예를 들어 Ubuntu 14.04에 설명 된 옵션을 찾을 수 없습니다 .
0xC0000022L


2
실제로 ... lxx에서만 작동하는 것처럼 보입니다. 참조 이 LXC-(STABLE) ML 스레드
리틀 친구

14

년은 /var/lib/lxc/Solr4StandAlone/config라인 읽기를 추가 :

lxc.mount.entry = /mnt/ssd/solr_data  /var/lib/lxc/Solr4StandAlone/rootfs/data none bind 0 0

그런 다음 lxc-stop컨테이너와 lxc-start컨테이너를 다시 중지 하십시오.

그것이 필요한 전부입니다.

심판 : 참조 링크


2
권한이없는 LXC 컨테이너 도구와 함께 작동하므로 솔루션을 더 잘 검토해야합니다. 이 경우 다른 것들은 작동하지 않습니다. 그리고 아마도 selinux / apport는 그들의 방법을 허용하기 위해 조정되어야 할 것입니다. 솔루션 +1!
Huygens

11

/data마운트가 제대로 작동하기 전에 로컬 컨테이너에 폴더 를 만들어야했습니다 .

이 fstab 항목도 사용했습니다.

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind     0       0

bind마운트 옵션은 OP에서 누락 된 것입니다. 나는 그것이 가장 중요한 수정이라고 생각합니다 (다른 모든 작업 답변에도 제시됨).
imz-Ivan Zakharyaschev

9

2015/09/30부터 보안 패치로 인한 변경으로 구성 파일에서 lxc.mount.entry를 사용하여 절대 경로로 마운트가 중단됩니다.

대신 상대 경로를 사용할 수 있습니다

 lxc.mount.entry = /mnt/ssd/solr_data data none bind 0 0

참조 : https://wiki.debian.org/LXC#Bind_mounts_inside_the_container


또한, 그것은 답변으로 작동합니다. 사람들이 곧 그것을 볼 수 있도록 upvoted 될 것입니다. 추가해 주셔서 감사합니다!
David Parks

6

LXC가 시간이 지남에 따라 변경됨에 따라 이것은 매우 간단 할 수 있지만 약간의 충격을 받았습니다. 나는 또한 이것에 대한 요점을 만들어서 나 자신을 기억할 수 있지만 단순히 lxc 구성 장치를 사용하면 트릭을 수행합니다.

sudo lxc config device add Solr4StandAlone sdb disk source=/var/lib/lxc/Solr4StandAlone/rootfs/data path=mnt/ssd/solr_data

참고 @biscuitNinja에 의해 언급 된 변경으로 인해 경로 인수에서 프론트 슬래시를 제거하는 것이 중요합니다.

컨테이너에서 호스트로 디렉토리 마운트


1

컨테이너 libvirt를 만드는 데 사용 하는 경우 lxc호스트의 디렉토리를 다음 passthrough과 같이 만들 수 있습니다.

root@localhost:/# cat /etc/libvirt/lxc/my_container.xml
...
 <filesystem type='mount' accessmode='passthrough'>
    <source dir='<dir on host>'/>
    <target dir='<dir on container>'/>
 </filesystem>
....
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.