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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:37:34