Всем привет. Сразу к делу.
Как, канонично, выставлять владельца Volume томов при запуске контейнера от non-root пользователя?
Пример: Dockerfile
...
VOLUME [/app/config]
RUN useradd -m -s /bin/nologin abc && \
chown -R abc:abc /app/config
USER abc
...
docker run --name debian_test -v /create_vol debian:jessie
Контейнер
chown 10000:10000 /create_vol
drwxr-xr-x 2 10000 10000 4096 Aug 6 15:43 create_vol
Хост
drwxr-xr-x 2 10000 10000 4096 Aug 6 11:43 _data
root@deb-vm-2-template:/var/lib/docker/volumes/52c70dea01d73e435bdfdcc38d2e616bb0e4cd03490ad57d624abeb5e48dff3c#
А это результат пересечения именования.
drwxr-xr-x 2 ssh backup 4096 Aug 6 11:43 _data
Как назначить владельца для созданного тома? Скажем, создаю директорию под конфиг и кидаю туда файлы. Создаю контейнер и маплю ему заранее подготовленный том. В итоге, как видно из примера, проблема с владельцами из-за разного пространства имен.
Пока вижу 2 решения:
- 1.В скрипте явно указывать юид и создавать пользователя с этим юидом на хосте. Минусы: Каждый раз пилить свой докер скрипт, возможно пересечение имен(т.е. не переносимость скрипта)
- 2. Создать энтрипоинт скрипт меняющий юид пользователя на юид владельца тома. Подсмотрел у офф репы redis. Минус: костыль
А может быть вообще не в том направлении иду, и нужно по другому разрешения устанавливать.