添加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/
验证操作
- 重新构建镜像:
docker build -t my-app .
- 运行容器测试:
docker run --rm my-app
内容的提问来源于stack exchange,提问作者Skyzreal
相关产品推荐
相关产品推荐

