Обновление группы без выхода из системы или подоболочки
Я пытаюсь запустить Docker для потоковой передачи Elastic MapReduce, но у меня возникли проблемы с разрешением. В моем скрипте начальной загрузки мне нужно, чтобы пользователь hadoop был частью группы docker (как описано на странице Основы AWS Docker):
sudo usermod -a -G docker hadoop
но я не могу выйти из системы или создать подоболочку (с newgrp). Есть ли способ заставить настройки группы вступить в силу в моем текущем сеансе оболочки?
2 ответа
Нет - если только hadoop
Если процесс запущен от имени пользователя root, то вы можете сделать некоторую хитрость GDB, чтобы изменить EUID, но не группу. Но я думаю, это не поможет в вашем случае.
Что может помочь, так это временно разрешить hadoop
доступ пользователей к файлам, предназначенным для docker
группа для доступа.
Пример: hadoop
пользователю нужен доступ на запись к /foo
каталог, но только docker
группа может в настоящее время написать это:
$ ls -ld / foo / drwxrwx --- 2 корневых докера 4096 10 марта 00:42 /foo/
В настоящее время большинство файловых систем поддерживают ACL:
$ sudo setfacl -mg: docker: rwx / foo
Теперь hadoop
пользователь сможет писать в /foo
,
Я знаю, это не то, что вы просили, но, поскольку нет возможности изменить EGID запущенного процесса, возможно, он работает наоборот с помощью ACL.
Мне потребовалось некоторое время, чтобы понять, как запустить Docker на Hadoop Streaming на EMR. Оказывается, что пользователь, который запускает задание, yarn
и не hadoop
, Таким образом, скрипт начальной загрузки должен иметь следующие строки:
sudo useradd -r yarn # create 'yarn' since it does not exist yet
sudo usermod -a -G docker yarn
Обратите внимание, что я создаю вручную yarn
пользователь, потому что при запуске скрипта начальной загрузки Hadoop еще не установлен