Dockerfile部署NuxtJS容器启动报错:sh: nuxt: Permission denied
问题:Docker启动NuxtJS容器时提示“nuxt: Permission denied”
通过Dockerfile构建NuxtJS Web服务器镜像无异常,但使用docker compose启动容器时出现权限错误,具体提示sh: nuxt: Permission denied。
所用Dockerfile
FROM node:18-alpine WORKDIR /usr/src/app COPY ./data/package*.json ./ RUN npm install COPY ./data . EXPOSE 3000 ENV NODE_ENV=production RUN addgroup -g 1001 -S appuser && \ adduser -u 1001 -S appuser -G appuser RUN chown -R appuser:appuser /usr/src/app USER appuser CMD ["npm", "start"]
操作日志
root@raspberrypi:/home/nuxtjs-docker-deployment# docker compose build --no-cache [+] Building 301.1s (12/12) FINISHED docker:default => [web internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 845B 0.0s => [web internal] load metadata for docker.io/library/node:18-alpine 0.9s => [web internal] load .dockerignore 0.0s => => transferring context: 68B 0.0s => [web 1/7] FROM docker.io/library/node:18-alpine@sha256:b1a0356f7d6b86c958a06949d3db3f7fb27f95f627aa6157cb98bc65c801efa2 0.0s => [web internal] load build context 5.2s => => transferring context: 1.59MB 5.0s => CACHED [web 2/7] WORKDIR /usr/src/app 0.0s => [web 3/7] COPY ./data/package*.json ./ 0.6s => [web 4/7] RUN npm install 71.5s => [web 5/7] COPY ./data . 32.3s => [web 6/7] RUN addgroup -g 1001 -S appuser && adduser -u 1001 -S appuser -G appuser 2.2s => [web 7/7] RUN chown -R appuser:appuser /usr/src/app 159.2s => [web] exporting to image 28.5s => => exporting layers 28.5s => => writing image sha256:18688212afa360bbeacd24b0b4ec9e064b56370276e2bd25cb9f0d42e7530783 0.0s => => naming to docker.io/library/nuxtjs-docker-deployment-web 0.0s root@raspberrypi:/home/nuxtjs-docker-deployment# docker compose down -v && docker compose up -d [+] Running 2/2 ✔ Container nuxtjs-docker-deployment-web-1 Removed 0.0s ✔ Network nuxtjs-docker-deployment_default Removed 0.4s [+] Running 1/2 ⠸ Network nuxtjs-docker-deployment_default Created 3.3s ✔ Container nuxtjs-docker-deployment-web-1 Started 3.1s root@raspberrypi:/home/nuxtjs-docker-deployment# docker logs -f c27d9889469d > start > nuxt start sh: nuxt: Permission denied
解决方法
原因
该错误是因为node_modules目录下的nuxt可执行文件权限配置异常,普通用户appuser无法执行。Alpine镜像下用root用户安装依赖时,部分包的可执行权限可能未正确设置,后续的chown仅修改了文件归属,未修复执行权限问题。
方案1:安装依赖时添加--unsafe-perm参数
修改Dockerfile中的npm install命令,确保安装过程中正确设置可执行文件权限:
RUN npm install --unsafe-perm
方案2:预构建Nuxt项目并调整步骤顺序
如果项目需要先执行nuxt build,建议在root用户下完成构建,再切换到普通用户,避免权限冲突:
FROM node:18-alpine WORKDIR /usr/src/app COPY ./data/package*.json ./ RUN npm install --unsafe-perm COPY ./data . ENV NODE_ENV=production # 先完成项目构建 RUN npm run build RUN addgroup -g 1001 -S appuser && \ adduser -u 1001 -S appuser -G appuser RUN chown -R appuser:appuser /usr/src/app # 确保可执行文件权限 RUN chmod -R +x node_modules/.bin USER appuser EXPOSE 3000 CMD ["npm", "start"]
方案3:临时用root用户启动(仅测试用)
若需快速排查问题,可临时注释掉切换用户的命令,用root启动容器(生产环境不推荐):
# USER appuser CMD ["npm", "start"]
内容的提问来源于stack exchange,提问作者LbGame
相关产品推荐
相关产品推荐

