2

Question

When running npm run start:debug command inside a docker container, I get this error:

# npm run start:debug

> [email protected] start:debug /usr/src/api
> nest start -e "node --inspect-brk 0.0.0.0:9229" --watch -p tsconfig.json

sh: 1: nest: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! [email protected] start:debug: `nest start -e "node --inspect-brk 0.0.0.0:9229" --watch -p tsconfig.json`
npm ERR! spawn ENOENT

Running npm ls --depth=0 shows that I have @nestjs/cli installed:

# npm ls --depth=0
[email protected] /usr/src/api
+-- @nestjs/[email protected]
+-- @nestjs/[email protected]
...

Why isn't the nest cli binary being found?

My Setup

This is how I launch the shell:

docker-compose -f docker-compose-base.yml -f docker-compose-dev.yml run api /bin/sh

My docker-compose files:

# -base
version: '3'

services:
  api:
    build: .
    restart: on-failure
    volumes:
      - /usr/src/api/node_modules
    container_name: api


# -dev
version: '3'

networks:
  # Use lb_lbnet network created by the load balancer repo (lb)
  # We do this because we need the load balance to resolve container names defined here to forward traffic
  # This is only needed for dev
  default:
    external:
      name: lb_lbnet

services:
  db:
    image: postgres:11
    container_name: db
    restart: always
    env_file:
      - ./db.env # uses POSTGRES_DB and POSTGRES_PASSWORD to create a fresh db with a password when first run
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
      # only used to upload DB dump:
      # - ./backup:/tmp/backup

  api:
    restart: 'no'
    build:
      context: .
      args:
        NODE_ENV: development
    depends_on:
      - db
    ports:
      - 9229:9229
    volumes:
      - ./:/usr/src/api
      - ./node_modules:/usr/src/api/node_modules
      # enable to debug hgezim-express-shopify-auth
      - ../../hgezim-express-shopify-auth:/usr/hgezim-express-shopify-auth
    env_file:
      - .env
    command: /bin/bash -c 'echo "Starting" && npm install && npm run start:debug'

My Dockerfile:

FROM node:12

WORKDIR /usr/src/api

COPY package*.json ./

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

RUN npm install # && npm ls --depth=0 # commented this out since it returns non-zero exit code

COPY . .

VOLUME [ "/usr/src/api/node_modules" ]

RUN ["/usr/local/bin/npm", "run","lint"]
RUN ["/usr/local/bin/npm", "run","build"]

# not using an execution list here so we get shell variable substitution
CMD /bin/bash -c 'npm run start:$NODE_ENV'
0

2 Answers 2

1

Nest CLI needs to be installed globally for the command line to work. Looks like you have it installed locally via package.json so nest was not added to PATH. Either add RUN npm install -g @nestjs/cli to your Dockerfile, or change start:debug script to use the local version (something like node_modules/<nestcli module>/.bin/nest).

0

In my case, the nestjs cli was missing in the vm so I ran docker pull nestjs/cli and it worked. Pull the nestjs cli image and try running docker compose up --build. If the issue still remains, put RUN install -g @nestjs/cli to your docker file. It must be running fine now.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.