Solución:
Las instrucciones en https://wiki.gentoo.org/wiki/LXD que mencionas son correctas, pero es posible que necesiten un poco más de explicación.
En el host, primero verifica la propiedad del directorio en el que se almacenan los datos del contenedor. Correr
sudo ls -l /var/lib/lxd/containers
y marque el propietario del contenedor con el que le gustaría compartir el directorio. En mi caso el uid
y gid
ambos eran 100000.
A continuación, utilícelos para cambiar la propiedad del directorio que desea compartir:
sudo chown 100000:100000 /tmp/share_on_host
Comparte el directorio con el contenedor de la forma que indicaste en tu comentario:
lxc config device add mycontainer sharedtmp disk
path=/tmp/share_on_guest source=/tmp/share_on_host
Ahora, en el contenedor, verá que el directorio /tmp/share_on_guest
(No aconsejaría montar su directorio como /tmp
porque el sistema lo usa para otras cosas y tiene permisos especiales) es propiedad de root. A partir de aquí puedes usar chown
en el contenedor para cambiar la propiedad a la apropiada uid
y gid
para su usuario en el contenedor.
Como nota al margen, después de cambiar la propiedad del contenedor a, por ejemplo, un usuario con uid
33 verá en el anfitrión que el uid
ahora hay 100033, lo que tiene mucho sentido.
Aquí hay una respuesta actualizada a esta pregunta.
Monte la carpeta de host /var/www
como /var/test
en el contenedor.
lxc config device add mycontainer vartest disk source=/var/www path=/var/test
Puede asignar adicionales dispositivos al contenedor, y estas pueden ser carpetas accesibles desde el host.
$ lxc config ## display help
...
lxc config device add [<remote>:]<container> <device> <type> [key=value...]
Add a device to a container.
...
Tenga en cuenta que <device>
es solo un nombre arbitrario que usted asigna, que se utilizará como un ID para la administración posterior del dispositivo.
Por ejemplo, para montar la carpeta de host “./host” como “/ mnt / host” en el contenedor …
lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host
Queda un problema – si desea que tanto el host como el contenedor puedan escribir en esta carpeta, la propiedad y los permisos deben configurarse en consecuencia. Esto se complica por el modo predeterminado de LXD que virtualiza los rangos numéricos para usuarios y grupos. id
valores. Sin embargo, hay una solución fácil: omita esta virtualización configurando el contenedor para que se ejecute con privilegios equivalentes al host …
lxc config set <container> security.privileged true
Las implicaciones completas de seguridad del host de este enfoque no están claras para mí en este momento, pero la virtualización parece “contenerlas” de alguna manera. El riesgo práctico depende de cómo y por qué utilizará el contenedor. Consulte las notas técnicas en https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers
Además, tenga en cuenta que este enfoque probablemente funcione mejor si normalmente opera en el contenedor como un usuario no root, como si lo adjunta con …
lxc exec zesty -- su --login ubuntu
- Notas adicionales sobre la configuración: https://help.ubuntu.com/lts/serverguide/lxd.html