LXC: Come posso montare una cartella dall'host al contenitore?


24

Sto cercando di montare una cartella sull'host su un contenitore LXC.

L'host ha una cartella /mnt/ssd/solr_datacreata (questa è attualmente sul filesystem di root, ma in seguito monterò un'unità SSD lì, quindi sto preparando per quello).

Voglio che la cartella si monti come /datanel contenitore.

Quindi nel file fstab dei contenitori ho il seguente:

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

Ma questo è un no-go, ottengo questo errore durante l'avvio del contenitore:

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'

Risposte:


16

Per creare automaticamente la directory nel contenitore, puoi anche aggiungere l' create=diropzione in fstab:

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

Modifica: questo è specifico per LXC. Vedi questa discussione

Proprio come avevamo già "opzionale", questo aggiunge due nuovi flag di mount specifici per LXC:

  • create = dir (farà un mkdir_p sul percorso)

  • create = file (farà un mkdir_p sul dirname + un fopen sul percorso)

Ciò è stato motivato da alcuni degli attacchi necessari per i contenitori non privilegiati.


1
A quale versione mountsi applica? Non sono riuscito a trovare l'opzione descritta in mount(8)Ubuntu 14.04, ad esempio.
0xC0000022L

Anche non negli ultimimount(8)
0xC0000022L

2
anzi ... sembra che funzioni solo con lxc. Vedi questa discussione su lxc-devel ML
little-dude

14

In /var/lib/lxc/Solr4StandAlone/configaggiungi una lettura di riga:

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

Quindi lxc-stopfermare di nuovo il contenitore e lxc-startil contenitore.

Questo è tutto ciò che serve.

ref: link di riferimento


2
La tua soluzione dovrebbe ottenere una migliore recensione in quanto funziona con lo strumento di contenitori LXC senza privilegi. Gli altri non funzioneranno in questo caso. E probabilmente selinux / apport avrebbe bisogno di essere modificato per consentire il loro metodo. +1 per la tua soluzione!
Huygens,

11

Ho dovuto creare la /datacartella nel contenitore locale prima che il montaggio funzionasse correttamente.

Ho anche usato questa voce fstab:

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

bindL'opzione mount è qualcosa che mancava nell'OP. Credo che sia la correzione più importante (presente anche in tutte le altre risposte operative).
imz - Ivan Zakharyaschev,

9

A partire dal 30/09/2015 una modifica risultante da una patch di sicurezza interrompe il montaggio in un percorso assoluto con lxc.mount.entry nel file di configurazione.

Invece puoi usare un percorso relativo

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

Vedi: https://wiki.debian.org/LXC#Bind_mounts_inside_the_container


Grande aggiunta, funziona come una risposta, verrà votata in modo che la gente lo veda presto. Grazie per averlo aggiunto!
David Parks,

6

Dato che LXC è cambiato nel tempo, questo può essere molto semplice, ma mi ha sconcertato per un po ', quindi volevo contribuire. Ho anche creato un'essenza per questo in modo da poter ricordare me stesso, ma semplicemente usando il dispositivo di configurazione lxc farà il trucco.

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

Nota È importante lasciare la barra frontale fuori dall'argomento path a causa di una modifica menzionata da @biscuitNinja

Montaggio delle directory dal contenitore all'host


1

Se stai usando libvirtper creare il tuo lxccontenitore, puoi fare in modo che la directory sull'host sia passthroughcome mostrato qui:

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>
....
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.