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

升级到php:7.4-fpm-alpine3.14后Laravel Mix写入mix-manifest.json权限错误

问题根因
  • Alpine 3.14 内置的Node.js/npm版本相比Alpine 3.13有安全策略升级,默认以root身份执行npm命令时,会自动降权到nobody用户运行,避免脚本提权风险
  • 你的Dockerfile中COPY源码到容器后,仅给bootstrap、storage目录设置了777权限,public目录的所有者仍然是root,nobody用户没有写入权限,因此生成mix-manifest.json时报错
  • 同时/root/.npm目录属于root用户,nobody用户也没有扫描权限,所以日志里也会出现对应目录的访问错误
可行解决方案

直接修改你的Dockerfile,调整COPY源码后的权限配置和npm命令执行逻辑即可,核心修改点如下:

  1. 复制源码后,先递归重置整个项目目录的所有者为www-data
  2. 切换到www-data用户执行npm相关操作,避免npm自动降权到nobody,同时保证生成的静态文件权限符合运行要求

以下是修改后的关键Dockerfile代码段:

# Add source code from local to container
WORKDIR /var/www/app
COPY ${SRC_DIR} .

# 新增:重置整个项目目录的所有者为www-data
RUN chown -R www-data:www-data /var/www/app

# Grant permission for folders & install packages
RUN chmod 777 -R bootstrap storage && \
    cp ./env/.env.${APP_ENV} .env && \
    composer install

RUN rm -rf .env
# 修改:切换到www-data用户执行npm命令
RUN su -s /bin/sh www-data -c "npm install && npm run ${APP_ENV} && rm -rf node_modules"

如果上述方案执行仍有异常,可以在npm命令后追加--unsafe-perm参数,强制允许当前用户操作文件:

RUN su -s /bin/sh www-data -c "npm install --unsafe-perm && npm run ${APP_ENV} --unsafe-perm && rm -rf node_modules"

内容的提问来源于stack exchange,提问作者Tiến Vũ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:15:07