使用Docker+Yarn Workspaces部署Nuxt3时遇‘nuxt: not found’错误求助
解决Docker+Yarn Workspaces搭建Nuxt3项目时
nuxt: not found错误 问题场景
使用Docker、Yarn Workspaces搭建Nuxt3项目,执行docker-compose up时抛出错误:admin_app| /bin/sh: nuxt: not found。
错误原因
- Docker构建上下文错误:原配置中
docker-compose.yml的build context指向./config/admin,导致无法复制项目根目录的package.json和yarn.lock,Yarn Workspaces无法正确解析依赖结构,Nuxt相关依赖未安装完整。 - 挂载覆盖容器依赖:直接将本地
packages/admin挂载到容器内的/admin,覆盖了容器中已安装的node_modules,导致nuxt命令找不到。 - 工作目录与脚本路径不匹配:Dockerfile中设置的工作目录
/admin与根目录package.json里的脚本路径不对应,执行命令时无法正确定位Nuxt项目。
解决方案
1. 修改docker-compose.yml配置
调整build上下文为项目根目录,同时修正挂载规则避免覆盖node_modules:
version: '3.7' services: admin: container_name: admin_app command: yarn admin stdin_open: true tty: true ports: - 3030:3030 build: dockerfile: ./config/admin/Dockerfile context: . # 改为项目根目录作为构建上下文 volumes: - "./packages/admin:/app/packages/admin" # 挂载项目代码 - "/app/packages/admin/node_modules" # 保留容器内的node_modules,不被本地覆盖
2. 更新config/admin/Dockerfile
调整工作目录为项目根目录,确保正确复制依赖配置并安装:
FROM node:lts-alpine # 设置项目根目录为工作目录 WORKDIR /app # 复制根目录的package.json和yarn.lock COPY package.json yarn.lock ./ # 安装所有依赖(包括Yarn Workspaces管理的子项目依赖) RUN yarn install --frozen-lockfile # 复制子项目代码到容器 COPY packages/ ./packages/ # 构建admin项目(可选,若需要预构建) RUN yarn admin:build # 暴露Nuxt开发端口(与docker-compose中映射的端口一致) EXPOSE 3030 # 执行根目录定义的admin开发脚本 CMD ["yarn", "admin"]
3. 确保子项目packages/admin/package.json的脚本正确
检查packages/admin/package.json中的scripts配置,确保dev命令指定正确端口:
{ "name": "admin", "version": "1.0.0", "private": true, "scripts": { "dev": "nuxt dev --port 3030", "build": "nuxt build", "preview": "nuxt preview" }, "devDependencies": { "@nuxt/devtools": "latest", "nuxt": "^3.8.0", "vue": "^3.3.8", "vue-router": "^4.2.5" } }
4. 重新构建并启动容器
执行以下命令重新构建镜像并启动服务:
docker-compose down docker-compose build --no-cache docker-compose up
内容的提问来源于stack exchange,提问作者Scott Carlton
相关产品推荐
相关产品推荐

