En la ventana acoplable, los archivos creados dentro de los contenedores tienden a tener una propiedad impredecible al inspeccionarlos desde el host. El propietario de los archivos en un volumen es root (uid 0) por defecto, pero tan pronto como las cuentas de usuario no root están involucradas en el contenedor y escriben en el sistema de archivos, los propietarios se vuelven más o menos aleatorios desde la perspectiva del host.
Es un problema cuando necesita acceder a los datos de volumen desde el host utilizando la misma cuenta de usuario que llama a los comandos de la ventana acoplable.
Las soluciones típicas son
- forzar los UID de los usuarios en el momento de la creación en Dockerfiles (no portátil)
- pasar el UID del usuario del host al
docker runcomando como una variable de entorno y luego ejecutar algunoschowncomandos en los volúmenes en un script de punto de entrada.
Ambas soluciones pueden dar cierto control sobre los permisos reales fuera del contenedor.
Esperaba que los espacios de nombres de usuario fueran la solución final a este problema. He ejecutado algunas pruebas con la versión 1.10 publicada recientemente y --userns-remap configurado en mi cuenta de escritorio. Sin embargo, no estoy seguro de que pueda hacer que la propiedad de archivos en volúmenes montados sea más fácil de manejar, me temo que en realidad podría ser lo contrario.
Supongamos que comienzo este contenedor básico
docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit
Y luego inspecciona el contenido del host:
ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/
-rw-r--r-- 1 100000 100000 6 Feb 8 19:43 test.txt
Este número '100000' es un sub-UID de mi usuario de host, pero como no se corresponde con el UID de mi usuario, todavía no puedo editar test.txt sin privilegios. Este subusuario no parece tener ninguna afinidad con mi usuario habitual real fuera de Docker. No está mapeado.
Las soluciones alternativas mencionadas anteriormente en esta publicación, que consistían en alinear los UID entre el host y el contenedor, ya no funcionan debido a la UID->sub-UIDasignación que se produce en el espacio de nombres.
Entonces, ¿hay alguna manera de ejecutar la ventana acoplable con el espacio de nombres de usuario habilitado (para mejorar la seguridad), y al mismo tiempo hacer posible que el usuario host que ejecuta la ventana acoplable posea los archivos generados en los volúmenes?