Jenkins中Docker执行npm install报错Missing write access to /app如何解决?
问题原因
Docker构建过程中,你在切换到node用户后才设置/app作为工作目录,Docker自动生成的/app目录默认所有者为root用户,同时你复制package*.json文件时没有指定文件所有者,文件默认归root所有。node用户没有/app目录的写入权限,执行npm install时需要写入依赖文件、创建node_modules目录,就会触发权限报错。
本地运行正常通常是因为本地构建有历史缓存,/app目录已经被修改过权限,或是你本地测试时使用root用户执行容器操作,因此没有触发问题。
修复方案
推荐在切换普通用户前先完成工作目录的权限配置,修改后的Dockerfile参考如下:
# 此时默认使用root用户操作,创建工作目录并修改所有者 WORKDIR /app RUN chown node:node /app # 切换到node用户后再执行后续操作 USER node # 复制package文件时指定所有者为node COPY --chown=node:node package*.json ./ RUN npm install COPY --chown=node:node ./cypress.json ./cypress.json COPY --chown=node:node . . CMD [ "bash" ]
内容的提问来源于stack exchange,提问作者Mona101ma
相关产品推荐
相关产品推荐

