Tengo un contenedor Docker con un volumen con nombre que se ejecuta en un usuario no root iniciado con el siguiente comando:
docker run -v backup:/backup someimage
En la imagen, hay un script de copia de seguridad que intenta guardar archivos en /backup directorio pero falla. Montar backup volumen en /backup dir pertenece al usuario root.
Cómo cambiar los permisos de /backup directorio?
----- EDIT1:
mcve abajo:
Ejecute el contenedor docker con Gerrit:
docker run -v backupgerrit:/backup --name gerrit gerritcodereview/gerrit
Ahora, en otra ventana de terminal, intente guardar algo en /backup dir:
Los volúmenes con nombre se inicializan cuando se crean por primera vez en el contenido de la imagen en la ubicación de montaje. Esa inicialización incluye el propietario y los permisos. Si /backup si no existe en su imagen, se creará un directorio vacío que será propiedad de root. Usted puede:
Opción 1: Cree el directorio en su Dockerfile con la propiedad y los permisos adecuados:
Tenga en cuenta que esto solo funciona cuando el volumen de copia de seguridad con nombre aún no existe o está vacío. Y debe ser un volumen con nombre, no un volumen host.
Opción 2: Inicialice el volumen con nombre, incluido parte del contenido dentro del volumen (un archivo vacío funcionaría) utilizando otro contenedor temporal:
Solución de trabajo aquí. Docker en la configuración predeterminada mantiene los datos de los volúmenes en /var/lib/docker/volumes/. Basado en un ejemplo de archivos de preguntas de backupgerrit el volumen con nombre se mantiene en /var/lib/docker/volumes/backupgerrit/_data. Esencial dir es _data y sus permisos. En este ejemplo, Gerrit Container utiliza un usuario con ID 1000. La solución es establecer la propiedad de este _data dir a 1000:1000.
# chown 1000:1000 /var/lib/docker/volumes/backupgerrit/_data# ls -ln /var/lib/docker/volumes/backupgerrit/drwxr-xr-x 2 1000 1000 4096 Feb 25 12:19 _data/
Y así es como se ve desde el lado del contenedor:
# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESeaa816980be5 gerritcodereview/gerrit "/entrypoint.sh" 31 minutes ago Up 31 minutes 8080/tcp, 29418/tcp gerrit# docker exec gerrit iduid=1000(gerrit) gid=1000(gerrit) groups=1000(gerrit)# docker exec gerrit ls -l / | grep backupdrwxr-xr-x 2 gerrit gerrit 4096 Feb 25 11:19 backup# docker exec gerrit touch /backup/testfile# docker exec gerrit ls -l /backuptotal 0-rw-r--r-- 1 gerrit gerrit 0 Feb 25 11:19 testfile
Permisos de _data los directorios son persistentes hasta que se elimina el volumen con