问题:如何修复 Docker sh 入口点中的“权限被拒绝”

我正在尝试为 Garry's Mod 服务器创建一个易于使用的 Docker 映像。虽然我的 Docker 映像构建得很好,但将其作为容器运行总是会导致一个错误:/bin/sh: 1: ./easygmod.sh: Permission denied

我使用cm2network/steamcmd图像作为基础。我已经尝试了上述基本图像具有的两个标签。我尝试过chmod +x,将用户更改为root,并在easygmod.sh脚本的第一行中摆弄 shebang,以及一些可能的拼写错误,特别是在文件名和路径中。

我有一个GitHub 存储库用于这个项目,自动构建到 Docker Hub。目前,涉及有问题的脚本的代码行是:

# Start main script
ADD easygmod.sh .
RUN chmod +x easygmod.sh
USER steam
CMD ./easygmod.sh

另外,脚本的shebang/第一行当前是#!/bin/sh

尽管没有逻辑解释,easygmod.sh脚本拒绝执行,总是抛出错误Permission denied。考虑到我唯一的其他公共 GitHub 项目非常相似(与cm2network/steamcmd具有相同基本操作系统的类似风格的 Docker 映像),这尤其令人困惑,从未遇到过这样的问题。

解答

该文件在容器中不属于steam所有,因此chmod +x不足。要么将--chown=steam添加到ADD,要么将chmod+x更改为a+rx

此外,您没有指定 CWD 或放置这些文件的路径。该映像的root版本可能具有steam无法访问的 CWD。你应该使用/home/steam/来代替。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐