2 minute read

En la segunda parte configuramos varios contenedores para que trabajasen juntos usando docker-compose. Hasta ahí bien.Pero quedan pequeños detalles por perfilar.

El más importante es que si mapeamos un directorio o archivo desde nuestra máquina contra un contenedor y este contenedor hace modificaciones, el dueño del fichero no seremos nosotros, sino el usuario que esté dentro del contenedor. Por poner un ejemplo… un “composer install” desde un contenedor de php como usuario root dentro de docker, nos dejará un directorio “vendor” con dueño root en nuestro código fuera del contenedor.

Esto puede ser un problema, hasta tal punto que necesitaremos privilegios de administrador para usar los ficheros Algo engorroso y que se debe solventar.

La solución rápida es tunear nuestro propio contenedor creando un usuario con el id de nuestro usuario de escritorio y ejecutar siempre los comandos desde ahí, pero es algo que puede resultar incómodo de gestionar.

Para eso Docker tiene los namespaces de usuario (más bien lo tiene Linux y lo aprovecha Docker en su beneficio).

Hay la opción de hacerlo en el servicio de Docker o por contenedor. En mi caso optaré por el servicio y así me olvido de tema.

  • Hay que averiguar el id que tiene asignado nuestro usuario con el comando id
$ id

uid=1000(faparicio) gid=1000(faparicio) grupos=1000(faparicio),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev),115(bluetooth),116(lpadmin),120(scanner),998(docker)
  • También hay que verificar que los ficheros /etc/subid y /etc/subgid tengan un aspecto similar a este respectivamente:
<user>:1000:1
<user>:100000:65536
<user>:998:1
<user>:100000:65536

En user se ha de poner el usuario que utilizamos para entrar en nuestro ordenador y el 998 es el grupo de docker en mi máquina.

  • Creamos un fichero /etc/docker/daemon.json con el contenido:
{
  "userns-remap": "<user>"
}

Reiniciamos el servicio de Docker y ya podemos ahorrarnos crear un usuario con nuestro uuid en los contenedores.

Aún no he conseguido que funcione en carpetas como un directorio de datos mapeado de un contenedor de Mysql. Si alguien lo consigue que me lo haga saber ;).

https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/

comments powered by Disqus