使用GitHub Actions部署Heroku Dyno时Docker容器脚本权限拒绝问题
解决Heroku部署Docker容器后runtime.sh权限拒绝问题
核心问题是**/app/runtime.sh缺少执行权限**,导致切换到nginx用户后无法执行启动脚本。
修复方案
在Dockerfile中添加给runtime.sh赋予执行权限的步骤,且要在切换到nginx用户之前执行:
修改Dockerfile的Runtime scripts和Start部分:
# Runtime scripts WORKDIR /app COPY scripts/fillNginxConf.js scripts/ COPY runtime.sh . # 新增:赋予runtime.sh执行权限 RUN chmod +x /app/runtime.sh # Start RUN chown -R nginx:nginx /app RUN chown -R nginx:nginx /etc/nginx/ USER nginx WORKDIR /app CMD ["/app/runtime.sh"]
问题原因分析
- 本地构建正常:本地环境中
runtime.sh文件本身带有执行权限(通过chmod +x runtime.sh设置过),Docker在COPY时会保留这个权限。 - GitHub Actions构建异常:Git默认不跟踪文件的执行权限变更(除非显式配置
core.filemode=true),推送至仓库的runtime.sh可能没有执行权限,导致构建镜像时COPY进去的文件也缺少执行权限;即使仓库中文件有权限,部分CI环境的文件系统可能会重置权限,最终镜像内的文件没有可执行属性。
额外验证点
修复后可以在本地重新构建镜像,进入容器验证权限:
docker build -t test-image . docker run -it --rm test-image sh # 执行以下命令查看权限 ls -l /app/runtime.sh
输出应包含rwx权限(比如-rwxr-xr-x),确保nginx用户能执行它。
内容的提问来源于stack exchange,提问作者Berkan Kadioglu
相关产品推荐
相关产品推荐

