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

添加ENTRYPOINT后Docker运行报错:/app/app.sh权限被拒绝

解决Docker运行时/app/app.sh权限拒绝问题

问题分析

你本地的app.sh虽然有执行权限,但COPY到容器内时,Docker可能不会完全保留文件权限(尤其是在Windows宿主机环境下,文件权限会被系统转换);另外目录中的*.Zone.Identifier是Windows系统的标记文件,可能会干扰容器内的文件处理逻辑。

修复方案

1. 在Dockerfile中确保脚本有执行权限

有两种方式可以保证容器内的app.sh拥有执行权限:

  • 兼容所有Docker版本的写法:
    在RUN命令中追加chmod +x操作,同时把ENTRYPOINT改成数组形式(exec模式,避免shell层的权限传递问题):
    FROM ubuntu
    COPY . /app
    RUN apt -y update && apt -y install curl && chmod +x /app/app.sh
    ENTRYPOINT ["/app/app.sh"]
    
  • Docker 23.0+推荐写法:
    使用COPY的--chmod参数直接设置文件权限,更简洁:
    FROM ubuntu
    COPY --chmod=755 . /app
    RUN apt -y update && apt -y install curl
    ENTRYPOINT ["/app/app.sh"]
    

2. 排除冗余文件减少干扰

创建.dockerignore文件,把Windows标记文件和其他不需要的文件排除在外,避免COPY到镜像中:

*.Zone.Identifier
# 可额外添加其他不需要的文件/目录
.git/

验证操作

  1. 重新构建镜像:
docker build -t my-app .
  1. 运行容器测试:
docker run --rm my-app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:39:59