Open semihural-tomtom opened 3 months ago
We intentionally don't include npx: see https://github.com/GoogleContainerTools/distroless/commit/fdd0b4807748299a73305fe35363a429d6ce650f for removal.
node should be available, but maybe not on the path in debug. Try running it directly /nodejs/bin/node
@loosebazooka is there any way to install this manually?
you could drop it in the container using a build of some kind. Would npm exec
not work for you? I don't know enough about npm.
sh: node: not found
You're getting this error because the node binary is at /nodejs/bin/node
and not in the PATH
npx
and npm
are removed as @loosebazooka mentioned, as they're package managers they're not bundled with distroless.
If you still want to have npm
/ npx
in your image, you can just add npm
as a dependency in package.json
.
Take this example, it'll install npm into local node_modules in app
directory and copy it over to the final stage, and it adds /nodejs/bin
to the PATH
FROM node:20-bookworm-slim AS builder
WORKDIR /app
RUN npm install --save npm
FROM gcr.io/distroless/nodejs20-debian12:debug
WORKDIR /app
ENV PATH /nodejs/bin:$PATH
COPY --from=builder /app /app
Then run it like this
❯ docker run --rm -it --entrypoint sh distroless-node-with-npm
/app # node -v
v20.18.0
/app # node node_modules/.bin/npm -v
10.9.0
/app # node node_modules/.bin/npx -v
10.9.0
Though, should note that it doesn't work flawlessly, as it looks like the child process node functions expects to find sh
at /bin/sh
(by default)
I'm trying to run my Node.js application using the
gcr.io/distroless/nodejs20-debian12:debug
image. However, when I execute my application, I get the following error:I am using the npx command in my docker-compose file, but it seems like node and npm are not installed in the container. Why are the node and npm commands not found in the gcr.io/distroless/nodejs20-debian12:debug image?
How can I run npx commands using a distroless Node.js image?
It seems like the Node.js runtime is not available. Here are the details when I run the container interactively: