我有以下 docker 文件
FROM something.com/..../lrh7:latest
RUN whoami
SHELL ["/usr/sbin", "-c"]
RUN /usr/sbin/groupadd -g 1000 AB_DOCKER_SETUP_GROUP
Run Code Online (Sandbox Code Playgroud)
当我进行 docker 构建时,它失败并提示权限被拒绝
container_linux.go:247: starting container process caused "exec: \"/usr/sbin\": permission denied"
Run Code Online (Sandbox Code Playgroud)
但当我改变时
RUN /usr/sbin/groupadd -g 1000 AB_DOCKER_SETUP_GROUP
Run Code Online (Sandbox Code Playgroud)
到
CMD ["su", "-" ,"groupadd", "-g", "1000", "AB_DOCKER_SETUP_GRO"]
Run Code Online (Sandbox Code Playgroud)
然后docker构建成功。whoami 的输出是 ROOT,这意味着我正在以 root 身份运行,即使在那之后我也必须显式指定 sudo 来添加组。
跑步
RUN su - /usr/sbin/groupadd -g 1000 AB_DOCKER_SETUP_GROUP # sudo/su both fails
Run Code Online (Sandbox Code Playgroud)
也因权限被拒绝而失败。我不清楚幕后发生了什么。
Tou*_*aza 18
对我来说,这是缺少 Docker 权限的问题
我使用以下命令修复了该问题。
sudo chmod -R g+rw "$HOME/.docker"
Run Code Online (Sandbox Code Playgroud)
仅供参考:我使用的是 Mac M1 机器。
SHELL 命令的作用是在容器中为 shell 模式执行设置默认 shell。您在脚本中设置错误。随后的 RUN 命令是在 shell 模式下完成的,它会触发您指定的错误默认 shell 的问题。
另外,您应该通过符号链接引用您的 shell,而不是尝试在sbin系统目录中指定它。这/bin/sh -c是 Linux 的默认 shell - 因此,您不必显式设置它。
您工作的原因CMD []是它是在命令模式下执行的 - 因此,它不会尝试使用您指定的错误的默认 shell。
以下脚本足以满足您的用例:
FROM something.com/..../lrh7:latest
RUN whoami
RUN groupadd -g 1000 AB_DOCKER_SETUP_GROUP
Run Code Online (Sandbox Code Playgroud)
或者,如果您仍然想指定相同的默认 shell:
FROM something.com/..../lrh7:latest
RUN whoami
SHELL ["/bin/sh", "-c"]
RUN groupadd -g 1000 AB_DOCKER_SETUP_GROUP
Run Code Online (Sandbox Code Playgroud)
运行命令的另一种方式是作为可执行文件。当您的图像中没有 shell 时,这会很有帮助。
RUN ["groupadd", "-g", "1000", "AB_DOCKER_SETUP_GROUP"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29750 次 |
| 最近记录: |