Docker构建中的权限被拒绝

时间:2019-08-26 06:50:38

标签: docker dockerfile

我有以下docker文件

FROM something.com/..../lrh7:latest
RUN whoami
SHELL ["/usr/sbin", "-c"]
RUN /usr/sbin/groupadd -g 1000 AB_DOCKER_SETUP_GROUP

当我执行docker build时,它失败,说明权限被拒绝

container_linux.go:247: starting container process caused "exec: \"/usr/sbin\": permission denied"

但是当我改变

RUN /usr/sbin/groupadd -g 1000 AB_DOCKER_SETUP_GROUP

CMD ["su", "-" ,"groupadd", "-g", "1000", "AB_DOCKER_SETUP_GRO"]

然后docker构建成功。 whoami的输出是ROOT,这意味着我正在以root用户身份运行,即使在那之后我必须显式指定sudo来添加组。

运行

RUN su - /usr/sbin/groupadd -g 1000 AB_DOCKER_SETUP_GROUP # sudo/su both fails

也失败,权限被拒绝。我不清楚幕后发生了什么。

1 个答案:

答案 0 :(得分:0)

SHELL命令的作用是在容器中为执行shell模式设置默认的shell。您在脚本中设置了错误。随后的RUN命令是在Shell模式下完成的,它会触发您指定的默认Shell错误的问题。

此外,您应该通过符号链接来引用外壳程序,而不是尝试在sbin系统目录中指定它。 /bin/sh -c是Linux的默认外壳程序-因此,您不必显式设置它。

CMD []工作的原因是它是在命令模式下执行的-因此,它不会尝试使用您指定的错误默认外壳程序。

在您的用例中,以下脚本就足够了:

FROM something.com/..../lrh7:latest
RUN whoami
RUN groupadd -g 1000 AB_DOCKER_SETUP_GROUP

或者,如果您仍然想指定相同的默认外壳:

FROM something.com/..../lrh7:latest
RUN whoami
SHELL ["/bin/sh", "-c"]
RUN groupadd -g 1000 AB_DOCKER_SETUP_GROUP

另一种运行命令的方法是作为可执行文件。当您的图像中没有外壳时,这会很有帮助。

RUN ["groupadd", "-g", "1000", "AB_DOCKER_SETUP_GROUP"]
相关问题