User Tools

Site Tools


permisos_y_propietarios_en_volumenes_con_docker-compose

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
permisos_y_propietarios_en_volumenes_con_docker-compose [2021/05/22 22:14] busindrepermisos_y_propietarios_en_volumenes_con_docker-compose [2021/05/23 01:50] (current) busindre
Line 9: Line 9:
 Cuando no se usan contenedores que utilizan root para ejecutar el proceso y se quiere hacer uso de "bind mounts" o volúmenes, es común que empiecen los problemas de acceso si no se ha configurado correctamente el tema permisos. La linea de comandos de Docker, Docker-compose o cualquier otra aplicación que implemente bind mounts, no permite configurar sus permisos / propietario. Por lo que hay que apoyarse siempre en algo externo para poder configurar los puntos de montaje como se quiera. Se presentan en esta pequeña guía algunas posibilidades para adaptar el usuario del contenedor al del bind mount. Cuando no se usan contenedores que utilizan root para ejecutar el proceso y se quiere hacer uso de "bind mounts" o volúmenes, es común que empiecen los problemas de acceso si no se ha configurado correctamente el tema permisos. La linea de comandos de Docker, Docker-compose o cualquier otra aplicación que implemente bind mounts, no permite configurar sus permisos / propietario. Por lo que hay que apoyarse siempre en algo externo para poder configurar los puntos de montaje como se quiera. Se presentan en esta pequeña guía algunas posibilidades para adaptar el usuario del contenedor al del bind mount.
  
-Cuando se trata de volúmenes, desde la linea de comandos es simple especificar un usuario y grupo ([[guia_rapida_de_la_linea_de_comandos_de_docker| Leer guía de docker.]]), pero también sería posible hacerlo desde el Dockerfile como veremos a continuación, siendo esta la opción más recomendada al usar docker-compose.+Ejemplo de montaje de volúmenes y bind mounts (directorios del host anfitrión) desde la linea de comandos usando la sintaxis "mount"
 +<code bash># Se monta el volumen con el mismo UID y GID del usuario que ejecutó el comando. 
 +docker run --mount source=volumen1,destination=/opt/volumen1 -it -u $UID:$UID alpine sh  
 + 
 +# Los bind mounts no permiten configurar el UID/GID y se montará en el contenedor con el UID/GID del anfitrión, exista o no en el contenedor. 
 +docker run -it --mount type=bind,src=/root/,dst=/root -w /root/ alpine sh 
 +# Siempre se puede arranca el contenedor indicando el usuario compatible con el directorio del host (bind mount) a montar. 
 +docker run --user antonio -it --mount type=bind,src=/hme/antonio/,dst=/home/antonio -w /home/antonio/ alpine sh</code> 
 + 
 +Cuando se trata de volúmenes, desde la linea de comandos es simple especificar un usuario y grupo como ya vimos ([[guia_rapida_de_la_linea_de_comandos_de_docker|Leer guía rápida de docker.]]), pero también sería posible hacerlo desde el Dockerfile como veremos a continuación, siendo esta la opción más recomendada al usar docker-compose.
  
 **Montar volúmenes (no bind mounts) a partir de un fichero Dockerfile** **Montar volúmenes (no bind mounts) a partir de un fichero Dockerfile**
Line 15: Line 24:
 Al margen de la linea de comandos, este es posiblemente el mejor método de configurar un punto de montaje dentro del contenedor con los permisos deseados cuando se usan aplicaciones estilo docker-compose. El proceso se basa en crear una imagen mediante un fichero Dockerfile donde se define el usuario y los permisos del directorio que monta el volumen. Una vez se monte el volumen, ya sea desde la linea de comandos o docker-compose, el punto de montaje en el contenedor heredará los permisos y propietario definidos previamente en la imagen. No es necesario que el usuario exista en el host, puede perfectamente solo existir en el contenedor. Al margen de la linea de comandos, este es posiblemente el mejor método de configurar un punto de montaje dentro del contenedor con los permisos deseados cuando se usan aplicaciones estilo docker-compose. El proceso se basa en crear una imagen mediante un fichero Dockerfile donde se define el usuario y los permisos del directorio que monta el volumen. Una vez se monte el volumen, ya sea desde la linea de comandos o docker-compose, el punto de montaje en el contenedor heredará los permisos y propietario definidos previamente en la imagen. No es necesario que el usuario exista en el host, puede perfectamente solo existir en el contenedor.
  
-En el ejemplo se crea una imagen docker llamada alpine_volumen que usará un usuario no privilegiado “testuser”.+En el ejemplo se crea una imagen docker llamada "alpine_volumenque usará un usuario no privilegiado “testuser”.
 <code bash> <code bash>
 ARG USR=testuser ARG USR=testuser
Line 23: Line 32:
 VOLUME /VOL_testuser                                      # Se hace una referencia al volumen que será montado desde linea de comando o docker-compose. VOLUME /VOL_testuser                                      # Se hace una referencia al volumen que será montado desde linea de comando o docker-compose.
 USER $USR                                                 # Usuario del proceso.</code> USER $USR                                                 # Usuario del proceso.</code>
- 
-Linea de comando (se creará el volumen XXXX si no existe). 
-<code>docker run --rm -it -v XXXX:/VOL_testuser alpine_volumen</code> 
  
 Montar el volumen desde docker-compose, el volumen se crea automáticamente si no existe. El contenedor creado solo ejecutará una shell. Montar el volumen desde docker-compose, el volumen se crea automáticamente si no existe. El contenedor creado solo ejecutará una shell.
Line 39: Line 45:
 volumes: volumes:
     XXXX:</code>     XXXX:</code>
 +
 +También se puede montar el volumen desde la linea de comando (se creará el volumen XXXX si no existe).
 +<code>docker run --rm -it -v XXXX:/VOL_testuser alpine_volumen</code>
 +
          
 **Montar directorios (bind mount) conociendo el usuario del contenedor y aplicándolo al  directorio host** **Montar directorios (bind mount) conociendo el usuario del contenedor y aplicándolo al  directorio host**
  
-Obtener el id del usuario que corre en el contenedor+Obtener el id del usuario que corre en el contenedor.
 <code bash> <code bash>
 # docker # docker
permisos_y_propietarios_en_volumenes_con_docker-compose.1621714464.txt.gz · Last modified: 2021/05/22 22:14 by busindre