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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:33:15