【问题标题】:How to fix 'Permission denied' in Docker sh entrypoint如何修复 Docker sh 入口点中的“权限被拒绝”
【发布时间】:2026-02-04 16:15:01
【问题描述】:

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

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

我有这个项目的GitHub repositoryauto-builds to 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。这尤其令人困惑,因为my only other public GitHub project 非常相似(与cm2network/steamcmd 具有相同基本操作系统的类似风格的 Docker 映像)从未出现过这样的问题。

【问题讨论】:

  • 在主机上运行chmod +x easygmod.sh。此外,您将该文件作为 USER 添加为 root 之后。

标签: docker dockerfile sh steam garrys-mod


【解决方案1】:

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

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

【讨论】:

  • @Phyremaster 我注意到了一件事。答案已更新。