You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建镜像后运行容器执行sh脚本报权限拒绝如何解决?

问题根因

你执行docker run时添加了-v $(pwd):/app挂载参数,该操作会将本地当前目录直接覆盖容器内的/app目录,你在Dockerfile构建阶段对/app路径下脚本做的所有权限修改都会被本地目录覆盖,因此构建阶段设置的可执行权限完全不生效。

解决方案

根据你的使用场景可任选以下方案:

  • 方案1(适配你当前作业要求的最优解,支持本地代码实时同步)
    直接在本地环境给对应shell脚本添加可执行权限,无需修改Dockerfile也无需重新构建镜像:
# 如果脚本在根目录执行:
chmod +x ./start.sh
# 如果脚本放在scripts目录下执行:
chmod +x ./scripts/*.sh

权限修改完成后重新执行原docker run命令即可正常运行。

  • 方案2(无需本地修改权限,不需要实时同步代码)
    移除docker run命令中的挂载参数,直接使用构建阶段拷贝到容器内的代码:
docker run -p 8080:8080 newapp ./start.sh

同时在Dockerfile中添加脚本赋权指令,完整Dockerfile内容如下:

FROM node:16

WORKDIR /app
COPY ["package.json", "package-lock.json*", "./"]
RUN npm install
COPY . .
RUN chmod +x ./start.sh

修改完成后重新构建镜像再运行即可。

  • 方案3(无需修改任何权限,快速验证)
    直接在docker run命令中指定sh解释器执行脚本,绕过可执行权限检查:
docker run -v $(pwd):/app -p 8080:8080 -w /app newapp sh ./start.sh

内容的提问来源于stack exchange,提问作者Filippo Rivolta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:24:05