我正在尝试在 Elastic MapReduce 流上运行 Docker,但遇到了权限问题。在我的引导脚本中,我需要“hadoop”用户成为“docker”组的一部分(如AWS Docker 基础知识页面):
sudo usermod -a -G docker hadoop
但我无法注销或生成子 shell(使用 newgrp)。有没有办法强制组设置在我当前的 shell 会话中生效?
答案1
不 - 除非该hadoop
进程以 root 身份运行,否则你可以做一些gdb 诡计改变欧盟身份证,但不是小组。但我想这对你的情况没有帮助。
什么可以帮助就是暂时地允许用户访问该组可以访问的hadoop
文件。docker
示例:hadoop
用户需要对目录具有写访问权限/foo
,但是docker
目前只有组可以对其进行写入:
$ ls -ld /foo/ drwxrwx--- 2 root docker 4096 3月10日 00:42 /foo/
大多数文件系统支持ACL如今:
$ sudo setfacl -mg:docker:rwx /foo
现在hadoop
用户将能够写入/foo
。
我知道,这不是你问的,但由于没有可能改变正在运行的进程的 EGID,也许它可以在 ACL 的帮助下以相反的方式工作。
答案2
我花了一段时间才弄清楚如何在 EMR 上的 Hadoop Streaming 上运行 Docker。事实证明,运行该作业的用户是yarn
而不是hadoop
。因此,引导脚本需要包含以下几行:
sudo useradd -r yarn # create 'yarn' since it does not exist yet
sudo usermod -a -G docker yarn
请注意,我手动创建yarn
用户,因为当引导脚本运行时,Hadoop 尚未安装