dockerdocker-composenuxt.jsyarnpkgyarn-workspaces

'nuxt: not found' Docker with yarn workspace


I've been trying to get a simple Nuxt 3 up and running with docker, yarn, and workspaces with the following setup:

  1. mkdir nuxt-app
  2. cd nuxt-app
  3. yarn init -p using just the defaults
  4. mkdir config
  5. mkdir config/admin
  6. Add docker-compose.yml to root directory
  7. Add Dockerfile to config/admin
  8. mkdir packages
  9. npx nuxi init packages/admin
  10. cd packages/admin
  11. yarn init -p

What the directory looks like

./config
  - admin
    - Dockerfile
./packages
 - admin
    nuxt...
./packages.json
./.dockerignore
./docker-compose.yml

docker-compose.yml

version: '3.7'
services:
  admin:
    container_name: admin_app
    command: yarn dev
    stdin_open: true
    tty: true
    ports:
      - 3030:3030
    build:
      dockerfile: Dockerfile
      context: ./config/admin
    volumes:
      - "./packages/admin:/admin"

Dockerfile

FROM node:lts-alpine

WORKDIR /admin

COPY ./package.json yarn.lock ./

RUN yarn install
RUN yarn admin:build

EXPOSE 8000

CMD [ "yarn", "serve" ]

package.json {root}

{
  "name": "docker.nuxt",
  "version": "1.0.0",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "scripts": {
    "admin": "yarn --cwd packages/admin dev",
    "admin:build": "yarn --cwd packages/admin build"
  }
}

Then when I run docker-compose up it throws and error admin_app| /bin/sh: nuxt: not found.


Solution

  • UPATED: So got it working on localhost with some help. Hope this helps anyone else looking to do this.

    Dockerfile

    FROM node:lts-alpine AS dependencies
    WORKDIR /app
    
    COPY ./package.json ./yarn.lock ./
    COPY ./packages/admin ./packages/admin/
    
    RUN yarn install
    
    # Build .output
    RUN yarn admin:build
    
    ENV NITRO_PORT=3030
    ENV NITRO_PRESET=node-server
    
    EXPOSE 3030
    
    CMD ["node", "./packages/admin/.output/server/index.mjs"]
    
    version: '3.7'
    services:
      admin:
        container_name: admin_app
        ports:
          - "3030:3030"
        build:
          dockerfile: ./config/admin/Dockerfile
          context: .
    

    Package.json

    {
      "name": "nuxt.app",
      "version": "1.0.0",
      "private": true,
      "workspaces": [
        "packages/*"
      ],
      "scripts": {
        "admin": "yarn --cwd packages/admin dev",
        "admin:install": "yarn --cwd packages/admin install",
        "admin:build": "yarn --cwd packages/admin build",
        "admin:start": "yarn --cwd packages/admin start",
      }
    }