Добрый день.
Как просто задать права на создаваемые файлы в папках проброшенных на хостовую систему?
Пользователь deploy, uid 1004, состоит в группе docker
Пробрасываю папку в контейнер при запуске, пишу в файл, выхожу
deploy@vc:~$ docker run --rm -ti -v $PWD/l2:/l2 debian bash
root@72981f87a7e4:/# echo booo! > l2/2
root@72981f87a7e4:/# exit
exit
права на файл - root root
deploy@vc:~$ ls -lh l2/2
-rw-r--r-- 1 root root 6 May 22 12:38 l2/2
ок, запускаюсь с -u и работаю под юзером "I have no name!" ))
deploy@vc:~$ docker run --rm -ti -u $(id -u) -v $PWD/l2:/l2 debian bash
I have no name!@30e0dcea97fa:/$
создаю файл и оно создается с правильными UID на хостовой системе но ессно, что то более сложное уже не работает.
docker run --rm -ti -u $(id -u) -v $PWD/l2:/var/lib/postgresql/data postgres
chown: changing ownership of `/var/lib/postgresql/data': Operation not permitted
и так да, не работает по понятным причинам.
пробовал включать наследование на папке - помогает, но не сильно, наследую группу пользователя, но в виду umask 0022 в контейнере у root получаю права для группы только чтение.
можно заморачиваться и пересобирать контейнер с создаваемым пользователем (с заданным uid и gid ), выставлять права на папки и тд, но это требует времени.
пока выхожу из ситуации через sudo возвращая владельцая файлов, но может я не умею готовить расширенные права на файловой системе?
можно ли как то более просто управлять правами в случае проброшенных volumes ?
UPD
ACL решает проблему частично.
user@dockers:~$ docker run --rm -ti -v $PWD/ll:/ll busybox sh
/ # echo root > /ll/1
/ # ls -lh /ll/1
-rw-r--r-- 1 root root 5 May 23 16:48 /ll/1
/ # exit
user@dockers:~$ echo $(id -u) >> ll/1
-bash: ll/1: Отказано в доступе
user@dockers:~$ setfacl -d -m u::rwx,g::r,o::-,u:$(whoami):rwx ll
user@dockers:~$ echo $(id -u) >> ll/1
-bash: ll/1: Отказано в доступе
user@dockers:~$ rm -rf ll/1
user@dockers:~$ ls -lh ll/1
ls: невозможно получить доступ к ll/1: Нет такого файла или каталога
user@dockers:~$ docker run --rm -ti -v $PWD/ll:/ll busybox sh
/ # echo root2 > /ll/1
/ # ls -lh /ll/1
-rw-rw---- 1 root root 6 May 23 16:49 /ll/1
/ # exit
user@dockers:~$ echo $(id -u) >> ll/1
user@dockers:~$ cat ll/1
root2
1000
user@dockers:~$ rm ll/1
user@dockers:~$ ls -lh ll/1
ls: невозможно получить доступ к ll/1: Нет такого файла или каталога
В случае если процесс в контейнере меняет владельца директории то все становится плохо.
user@dockers:~$ mkdir db
user@dockers:~$ ls -lhd db
drwxrwxr-x+ 2 user user 4,0K мая 23 20:22 db
user@dockers:~$ getfacl db
# file: db
# owner: user
# group: user
user::rwx
user:user:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:user:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
user@dockers:~$ docker run -d -v $PWD/db:/var/lib/postgresql/data --name postgres postgres
a4bcadb8b48d001c2c7846a79ad09a7468aa20d3fa265822464a0dd23481bf16
user@dockers:~$ ls -lh db
ls: невозможно открыть каталог db: Отказано в доступе
user@dockers:~$ ls -lhd db
drwx------+ 18 999 user 4,0K мая 23 20:23 db
user@dockers:~$ getfacl db
# file: db
# owner: 999
# group: user
user::rwx
user:user:rwx #effective:---
group::r-x #effective:---
mask::---
other::---
default:user::rwx
default:user:user:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
user@dockers:~$ setfacl -m u:user:rwx db
setfacl: db: Операция не позволена
UPD2
можно возвращать права на volume через docker
user@dockers:~$ mkdir db
user@dockers:~$ ls -lh db
итого 0
user@dockers:~$ docker run -d -v $PWD/db:/var/lib/postgresql/data --name postgres postgres
6f839610604dca662a585b73dbbe9204b805887bd12a3826a1a7bdebfa1025a4
user@dockers:~$ ls -lh db
ls: невозможно открыть каталог db: Отказано в доступе
user@dockers:~$ docker stop postgres
postgres
user@dockers:~$ docker rm postgres
postgres
user@dockers:~$ ls -lh db
ls: невозможно открыть каталог db: Отказано в доступе
user@dockers:~$ ID=$(id -u)
user@dockers:~$ docker run --rm -ti -v $PWD/db:/db busybox sh -c "chown -R $ID db"
user@dockers:~$ ls -lh db
итого 112K
drwx------+ 5 user docker 4,0K мая 23 21:47 base
drwx------+ 2 user docker 4,0K мая 23 21:47 global
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_clog
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_dynshmem
-rw-------+ 1 user docker 4,4K мая 23 21:47 pg_hba.conf
-rw-------+ 1 user docker 1,6K мая 23 21:47 pg_ident.conf
drwx------+ 4 user docker 4,0K мая 23 21:47 pg_logical
drwxrwxr-x+ 4 user docker 4,0K мая 23 21:47 pg_multixact
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_notify
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_replslot
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_serial
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_snapshots
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_stat
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_stat_tmp
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_subtrans
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_tblspc
drwx------+ 2 user docker 4,0K мая 23 21:47 pg_twophase
-rw-rw-r--+ 1 user docker 4 мая 23 21:47 PG_VERSION
drwx------+ 3 user docker 4,0K мая 23 21:47 pg_xlog
-rw-------+ 1 user docker 88 мая 23 21:47 postgresql.auto.conf
-rw-------+ 1 user docker 21K мая 23 21:47 postgresql.conf
-rw-rw-r--+ 1 user docker 37 мая 23 21:47 postmaster.opts