У меня есть контейнер 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 реж:
Именованные тома инициализируются при первом создании содержимым образа в месте монтирования. Эта инициализация включает в себя владельца и разрешения. Если /backup не существует в вашем изображении, тогда будет создан пустой каталог, принадлежащий root. Ты можешь:
Вариант 1: Создайте каталог в вашем Dockerfile с соответствующими правами собственности и разрешениями:
Обратите внимание, что это работает только в том случае, если именованный том резервной копии еще не существует или он пуст. И это должен быть именованный том, а не основной том.
Вариант 2: Инициализируйте именованный том, включая некоторое содержимое внутри тома (подойдет пустой файл), используя другой временный контейнер:
Рабочее решение здесь. 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 каталог сохраняется до удаления тома с