Reputation: 7318
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?
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'
Upvotes: 2
Views: 6482
Reputation: 1482
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
).
Upvotes: 1