A continuación se muestra lo que hice para montar uno de mi directorio de host en el contenedor. Esto es más complicado de lo que parece porque nos gustaría lograr
- Dentro del contenedor deberíamos poder escribir en el directorio.
- Fuera del contenedor, deberíamos poder escribir en los archivos y directorios creados dentro del contenedor.
Después de leer varios artículos en línea (el más útil es este problema de github ), así es como resuelvo esto. El truco consiste en asignar el uid y gid del usuario host al uid y gid del usuario dentro del contenedor.
Supongamos que voy a montar /home/breakds/projects
exactamente en la misma ubicación en el contenedor. El directorio externo es propiedad del usuario breakds
, cuyo uid y gid son1000
.
Luego creé un usuario en el contenedor llamado debian
, cuyo uid y gid también eran 1000
(porque es el primer usuario no root). Luego crearé un perfil (lxc) en el host por
lxc profile edit breakds
Y a continuación se muestra el contenido del perfil (creo que está en 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
Luego, aplique este perfil a ese contenedor permanentemente:
$ lxc profile apply <my container> breakds
Esto debería funcionar.
NOTA : Tenga en cuenta que antes de cambiar a este perfil, asegúrese de que todas las direcciones o archivos cuyo propietario / grupo es debian deben eliminarse (y probablemente volver a crearse después del cambio). Esto se debe a que después de la asignación de UID y GID, su propiedad dejará de ser válida. Originalmente pensé que ya que solo estoy asignando 1000 a 1000 todo debería estar bien, pero creo que me perdí algo aquí y sería genial si alguien puede aconsejar sobre cómo resolver esto sin el truco.