Docker y --userns-remap, ¿cómo administrar los permisos de volumen para compartir datos entre el host y el contenedor?

En Docker, 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) de forma predeterminada, 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 datos de volumen desde el host utilizando la misma cuenta de usuario que está llamando a los comandos del acoplador.

Las soluciones típicas son

Obligar a los usuarios de UID en el momento de la creación en Dockerfiles (no portátil)pasar el UID del usuario host aldocker run comando como una variable de entorno y luego ejecutar algunoschown comandos 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 realizado algunas pruebas con la versión 1.10 recientemente lanzada y --userns-remap configurada en mi cuenta de escritorio. Sin embargo, no estoy seguro de que pueda facilitar el manejo de la propiedad de archivos en volúmenes montados, me temo que podría ser todo 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 inspeccione 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 host, pero como no corresponde al UID de mi usuario, todavía no puedo editar test.txt sin privilegios. Este subusuario no parece tener ninguna afinidad con mi usuario habitual fuera de Docker. No está mapeado de vuelta.

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 aUID->sub-UID mapeo que ocurre en el espacio de nombres.

Entonces, ¿hay alguna manera de ejecutar Docker con el espacio de nombres de usuario habilitado (para mejorar la seguridad), y al mismo tiempo hacer posible que el usuario host que ejecuta Docker posea los archivos generados en los volúmenes?

Respuestas a la pregunta(3)

Su respuesta a la pregunta