Di seguito è riportato ciò che ho fatto per montare una delle mie directory host sul contenitore. Questo è più complicato di quanto sembri perché vorremmo ottenere
- All'interno del contenitore dovremmo essere in grado di scrivere nella directory.
- Al di fuori del contenitore dovremmo essere in grado di scrivere nei file e nelle directory creati all'interno del contenitore.
Dopo aver letto vari articoli online (il più utile è questo problema github ), ecco come lo risolvo. Il trucco è mappare l'UID e il GID dell'utente host all'UID e il GID dell'utente all'interno del contenitore.
Supponiamo che ho intenzione di montare /home/breakds/projects
nella stessa identica posizione nel contenitore. La directory esterna è di proprietà dell'utente breakds
, di cui uid e gid sono 1000
.
Ho quindi creato un utente nel contenitore chiamato debian
, il cui uid e gid sono stati ugualmente 1000
(perché è il primo utente non root). Creerò quindi un profilo (lxc) sull'host da
lxc profile edit breakds
E di seguito è riportato il contenuto del profilo (credo che sia in formato 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
Quindi, applicare questo profilo a quel contenitore in modo permanente:
$ lxc profile apply <my container> breakds
Questo dovrebbe fare il trucco.
NOTA : Prima di passare a questo profilo, assicurarsi che tutte le directory oi file il cui proprietario / gruppo sia debian debbano essere eliminati (e probabilmente ricreati dopo il passaggio). Questo perché dopo il mapping di uid e gid, la loro proprietà non sarà più valida. Inizialmente pensavo che, dal momento che sto solo mappando da 1000 a 1000, tutto dovrebbe andare bene, ma penso di aver perso qualcosa qui e sarebbe bello se qualcuno potesse consigliarti su come risolverlo senza l'hacking.