Измените права доступа для файлов, созданных службой демона Docker

Вопрос или проблема

Я пытаюсь изменить права по умолчанию, назначаемые файлам при создании их демоном Docker, изменив умолчание umask. Служба демона Docker работает от имени root и создает файлы с umask root. Я пытался изменить umask, добавив команду в /etc/init.d/docker, а также передал желаемый umask(000) в качестве опции для start-stop-daemon, но ни один из этих методов не сработал. Как можно изменить права по умолчанию, присваиваемые файлам, созданным демоном Docker?

Правка: Я пытаюсь установить права по умолчанию для файлов и папок, создаваемых демоном Docker на хосте, а не внутри контейнера. Например, если папка на хост-машине, смонтированная внутри контейнера, не существует, Docker автоматически создаёт папки и присваивает права на основе умолчания umask (который является для root).

Контейнеры Docker обычно и по замыслу работают в непривилегированном режиме. Когда процесс в своем контейнере работает от имени root, uid процесса 0 отображается на хост-операционную систему как другой пользователь (обычно “nobody”). Это необходимо для того, чтобы любой процесс внутри контейнера мог читать файлы с хост-операционной системы; эти файлы должны быть доступны для чтения для всех. Предположительно, (покупатель, будьте осторожны, поскольку я не знаком с кодом) Docker игнорирует настройки umask, чтобы обеспечить доступность директории, созданной через опцию -v, для чтения контейнером.

Я не уверен по поводу файлов, созданных внутри контейнера с помощью btrfs или overlayfs, должны ли эти файлы, доступные хост-операционной системе, быть общедоступными. Я также не уверен, обрабатывается ли создание этих файлов внутри контейнера или на хост-операционной системе.

Ответ или решение

Изменение разрешений для файлов, создаваемых службой демона Docker, является важной задачей для многих администраторов, особенно когда речь идет о совместном использовании файлов между хостовой системой и контейнерами. В этом ответе мы рассмотрим, как можно изменить настройку umask для файлов и папок, создаваемых демоном Docker на хостовой машине.

Понимание проблемы

Демон Docker по умолчанию запускается с правами пользователя root, и поэтому он создает файлы с umask, заданным для этого пользователя. По умолчанию umask для root равен 0022, что означает, что создаваемые файлы имеют разрешения 644, а директории – 755. Это может привести к проблемам, если папки, созданные на хосте, не имеют нужных разрешений для доступа из контейнера.

Решение: Изменение umask

  1. Изменение конфигурации сервиса Docker:
    На большинстве современных систем, использующих systemd, для настройки демона Docker используется файл конфигурации. Вам нужно изменить или создать файл конфигурации, чтобы установить нужный umask.

    • Создайте или отредактируйте файл /etc/systemd/system/docker.service.d/override.conf (если папка не существует, создайте её):

      [Service]
      ExecStart=
      ExecStart=/usr/bin/dockerd --host=fd:// --umask=000
    • Не забудьте перезагрузить конфигурацию:

      sudo systemctl daemon-reload
  2. Перезапуск службы Docker:
    После выполнения изменений перезапустите службу Docker, чтобы новые настройки вступили в силу:

    sudo systemctl restart docker
  3. Проверка изменений:
    После перезапуска можно использовать команды, такие как docker run -v для проверки созданных папок и файлов. Убедитесь, что у них правильные разрешения.

Рассмотрение специфики работы с файловыми системами

Пользуясь файловыми системами, такими как btrfs или overlayfs, следует помнить, что Docker обрабатывает создание файлов и директорий внутри контейнеров особым образом. Если контейнер запущен с правами root, он может создать файлы с правами, зависящими от umask контейнера. Однако, чтобы эти файлы были доступными на хосте, необходимо правильно настроить разрешения при монтировании.

Альтернативные методы и рекомендации

Если изменения в конфигурации демона не являются возможными или вы не можете их применить:

  • Использование скриптов:
    Создайте скрипты, которые будут запускаться после создания папок/docker-compose, чтобы менять разрешения файлов. Например, при использовании docker-compose вы можете добавить команду chmod в post-build сценарии, которые изменят разрешения на необходимые после запуска контейнера.

  • Проверка прав на стороне контейнера:
    Если возможно, измените права на уровне контейнера, чтобы гарантировать правильный доступ к необходимым папкам.

Заключение

Изменение разрешений файлов, создаваемых демоном Docker, возможно, но требует понимания работы системы и наличия прав доступа на уровне конфигурации. Правильная настройка позволит избежать проблем с доступом и улучшит взаимодействие между хостовой системой и контейнерами. Важно помнить о тестировании после внесения изменений, чтобы убедиться, что ваша система работает так, как задумано.

Оцените материал
Добавить комментарий

Капча загружается...