Вопрос или проблема
Я пытаюсь изменить права по умолчанию, назначаемые файлам при создании их демоном 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
-
Изменение конфигурации сервиса 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
-
-
Перезапуск службы Docker:
После выполнения изменений перезапустите службу Docker, чтобы новые настройки вступили в силу:sudo systemctl restart docker
-
Проверка изменений:
После перезапуска можно использовать команды, такие какdocker run -v
для проверки созданных папок и файлов. Убедитесь, что у них правильные разрешения.
Рассмотрение специфики работы с файловыми системами
Пользуясь файловыми системами, такими как btrfs или overlayfs, следует помнить, что Docker обрабатывает создание файлов и директорий внутри контейнеров особым образом. Если контейнер запущен с правами root, он может создать файлы с правами, зависящими от umask
контейнера. Однако, чтобы эти файлы были доступными на хосте, необходимо правильно настроить разрешения при монтировании.
Альтернативные методы и рекомендации
Если изменения в конфигурации демона не являются возможными или вы не можете их применить:
-
Использование скриптов:
Создайте скрипты, которые будут запускаться после создания папок/docker-compose, чтобы менять разрешения файлов. Например, при использовании docker-compose вы можете добавить командуchmod
вpost-build
сценарии, которые изменят разрешения на необходимые после запуска контейнера. -
Проверка прав на стороне контейнера:
Если возможно, измените права на уровне контейнера, чтобы гарантировать правильный доступ к необходимым папкам.
Заключение
Изменение разрешений файлов, создаваемых демоном Docker, возможно, но требует понимания работы системы и наличия прав доступа на уровне конфигурации. Правильная настройка позволит избежать проблем с доступом и улучшит взаимодействие между хостовой системой и контейнерами. Важно помнить о тестировании после внесения изменений, чтобы убедиться, что ваша система работает так, как задумано.