He estado experimentando con LXC / LXD en Ubuntu 14.04 y todo funciona muy bien. Solo necesito descubrir cómo hacer que los directorios compartidos funcionen entre mi máquina host y un contenedor para poder deshacerme de Virtualbox de una vez por todas.
He visto esta página: https://wiki.gentoo.org/wiki/LXD
Lo que proporciona instrucciones, pero sigo recibiendo errores.
¿Alguien sabe de instrucciones simples y claras para que esto funcione? Cualquier ayuda muy apreciada.
lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared
. Pero mirando el directorio en el contenedor, el propietario y el grupo de los archivos están configurados en 'nobody' y 'nogroup' y el montaje es de solo lectura.lxc file
para transferir archivos entre el host y el contenedor, usandopush
ypull
.Respuestas:
Las instrucciones en https://wiki.gentoo.org/wiki/LXD que mencionas son correctas pero pueden necesitar 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
y marque el propietario del contenedor con el que desea compartir el directorio. En mi caso, el
uid
ygid
ambos fueron 100000.Luego, utilícelos para cambiar la propiedad del directorio que desea compartir:
Comparta el directorio con el contenedor de la manera que indicó en su comentario:
Ahora, en el contenedor, verá que el directorio
/tmp/share_on_guest
(no recomendaría montar su directorio/tmp
porque el sistema lo utiliza para otras cosas y tiene permisos especiales) es propiedad de root. A partir de aquí, puede usarchown
en el contenedor para cambiar la propiedad a la apropiadauid
ygid
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 host queuid
ahora hay 100033, lo que tiene mucho sentido.fuente
/var/lib/lxd/containers
eso/var/lib/lxd/storage-pools/lxd/containers
(en este caso, el últimolxd
bit es el nombre de mi grupo de almacenamiento ZFS). Todos los contenedores parecían tener el mismo 165536 uid / gid cuando se ejecutaban y pertenecíanroot:root
cuando estaban apagados.lxc config
y funcionó de maravilla!Aquí hay una respuesta actualizada a esta pregunta.
Monte la carpeta del host
/var/www
como/var/test
en el contenedor.fuente
Puede asignar dispositivos adicionales al contenedor, y estos pueden ser carpetas accesibles para el host.
Tenga en cuenta que
<device>
es solo un nombre arbitrario que usted asigna, que se usará como ID para la administración posterior del dispositivo.Por ejemplo, para montar la carpeta del host "./host" como "/ mnt / host" en el contenedor ...
Sigue habiendo un problema : si desea que el host y 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 los
id
valores de usuario y grupo . Sin embargo, existe una solución fácil : evitar esta virtualización configurando el contenedor para que se ejecute con privilegios equivalentes de host ...Las implicaciones completas de seguridad del host de este enfoque no me quedan claras en este momento, pero parece estar algo "contenido" por la virtualización. El riesgo práctico depende de cómo y por qué usará 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 funciona mejor si normalmente opera en el contenedor como un usuario no root, como si se conecta con ...
fuente
env
es diferente, en particularhttp_proxy
. Un ejemplo Solución:sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update
.http_proxy
, creo que la solución más fácil es probablemente habilitar IPV4 como se explica aquí .sudo dhclient
en el contenedor - o cambiarmanual
adhcp
in50-cloud-init.cfg
. Buenas pistas aquí: github.com/lxc/lxd/issues/1298Basado en la excelente respuesta de ph0t0nix , propongo el siguiente enfoque paso a paso para mi servidor Ubuntu 18.04:
En el host, determine el UID del propietario de rootfs:
En el contenedor, determine el UID de ubuntu (es decir, el usuario en el contenedor):
Cree una carpeta compartida en el host y agréguela al contenedor:
Ajuste en el UID del host de la carpeta compartida (UID = host UID + invitado UID):
Guest (usuario ubuntu) ahora tiene acceso a la carpeta compartida y puede ajustarse dentro del acceso del contenedor a la carpeta compartida usando
chmod
.fuente
Ahora tengo una solución segura y funcional para este problema, utilizando perfiles LXD para manejar la asignación entre UID y GID en el contenedor y en el host.
Una esencia muy útil se puede encontrar aquí:
https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8
fuente
0777
permisos aka "por favor, hackea mi sistema y destruye mis datos" sin razón aparente! Casi nunca hay una razón para eso porque se puede evitar con modificaciones más sensatas como cambiar la propiedad (de grupo). -1