uid / gid внутри контейнера, как правило, совпадает с uid / gid вне контейнера на хосте (пространства имен пользователей отключены по умолчанию и не решат эту проблему, фактически они могут ухудшить ситуацию).).Обратите внимание, что это uid / gid, а не имя пользователя и имя группы, поскольку контейнеры могут иметь свои собственные файлы / etc / passwd и / etc / group.
Вам необходимо запустить свой контейнер с помощью uid / gidсовпадающие с файлами на вашем хосте.Это делается с помощью секции user
файла композиции или опции -u
в командной строке запуска Docker, например:
docker run -u "$(id -u):$(id -g)" -v /base/documents:/app/documents:rw ...
или в файле композиции:
user: "1000:1000"
Если ваше приложение должно работать от имени пользователя root, то вариантов для этого гораздо меньше.Я предпочитаю динамически обрабатывать uid / gid из точки входа, которая запускается как root, фиксирует uid / gid внутри контейнера, чтобы соответствовать хосту (глядя на владельца тома), а затем отбрасывается из root в пользователя контейнера длязапустив приложение.Подробнее о том, как это сделать, вы можете увидеть в моем репозитории base image , включая пример nginx и скрипт fix-perms.