Я пытаюсь запустить Docker в потоковом режиме Elastic MapReduce, но у меня возникли проблемы с разрешениями. В моем сценарии начальной загрузки мне нужно, чтобы пользователь «hadoop» входил в группу «docker» (как описано в Страница основ AWS Docker):
sudo usermod -a -G docker hadoop
но я не могу выйти из системы или создать подоболочку (с помощью newgrp). Есть ли способ заставить настройку группы вступить в силу в моем текущем сеансе оболочки?
Нет - если только hadoop
процесс запущен как root, тогда вы можете сделать некоторые обман gdb изменить EUID, но не группу. Но думаю, в твоем случае это не поможет.
какой мог помощь в том, чтобы временно позволить hadoop
доступ пользователей к файлам, предназначенным для docker
группа для доступа.
Пример: hadoop
пользователю необходим доступ на запись к /foo
каталог, но только docker
группа в настоящее время может написать это:
$ ls -ld /foo/ drwxrwx--- 2 root docker 4096 Mar 10 00:42 /foo/
Поддержка большинства файловых систем ACL В наше время:
$ sudo setfacl -m g:docker:rwx /foo
Сейчас hadoop
пользователь сможет писать на /foo
.
Я знаю, что вы не об этом спрашивали, но поскольку нет возможности изменить EGID запущенного процесса, возможно, это работает наоборот с помощью списков контроля доступа.
Мне потребовалось время, чтобы понять, как запустить 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 еще не установлен