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