Изменение разрешений для именованных томов в Docker

У меня есть контейнер Docker с именованным томом, запущенный некорневым пользователем, запущенный со следующей командой:

docker run -v backup:/backup someimage

На изображении есть сценарий резервного копирования, который пытается сохранить файлы в /backup каталог, но он терпит неудачу. Установленный backup объем в /backup каталог принадлежит пользователю root.

Как изменить разрешения для /backup каталог?

-----РЕДАКТИРОВАТЬ 1:

mcve ниже:

Запустите контейнер docker с помощью Gerrit:

docker run -v backupgerrit:/backup --name gerrit gerritcodereview/gerrit

Теперь в другом окне терминала попробуйте сохранить что-нибудь в /backup реж:

docker exec gerrit touch /backup/testfile

Вы получите:

touch: cannot touch '/backup/testfile': Permission denied

Именованные тома инициализируются при первом создании содержимым образа в месте монтирования. Эта инициализация включает в себя владельца и разрешения. Если /backup не существует в вашем изображении, тогда будет создан пустой каталог, принадлежащий root. Ты можешь:

Вариант 1: Создайте каталог в вашем Dockerfile с соответствующими правами собственности и разрешениями:

FROM your-imageUSER rootRUN mkdir -p /backup \ && chown -R your-user /backupUSER your-user

Обратите внимание, что это работает только в том случае, если именованный том резервной копии еще не существует или он пуст. И это должен быть именованный том, а не основной том.

Вариант 2: Инициализируйте именованный том, включая некоторое содержимое внутри тома (подойдет пустой файл), используя другой временный контейнер:

docker run --rm -v backupgerrit:/backup busybox \  /bin/sh -c 'touch /backup/.initialized && chown -R 1000:1000 /backup'

Вариант 3: Настройте разрешения после монтирования тома, требуя root внутри вашего контейнера:

docker exec -u 0:0 your-container chown -R your-user /backup

Рабочее решение здесь. Docker с настройками по умолчанию сохраняет данные томов в /var/lib/docker/volumes/. Основываясь на примере из файлов вопросов backupgerrit именованный том хранится в /var/lib/docker/volumes/backupgerrit/_data. Существенным направлением является _data и его разрешения. В этом примере контейнер Gerrit использует пользователя с идентификатором 1000. Решение состоит в том, чтобы установить право собственности на это _data режиссер в 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/

И вот как это выглядит со стороны контейнера:

# 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

Разрешения на _data каталог сохраняется до удаления тома с

# docker volume rm backupgerrit