Reputation: 163
I am trying to build a docker image for a nodejs web backend which currently looks like this:
FROM node:10-alpine
WORKDIR /usr/src/smart-brain-api
COPY ./ ./
RUN npm install
CMD ["/bin/bash"]
When I do docker run -it
after building an image, I get this weird error
internal/modules/cjs/loader.js:638
throw err;
^
Error: Cannot find module '/bin/bash'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
however if I edit the docker file and change CMD ["/bin/bash"] to CMD ["/bin/sh"] everything works
I am working on a macbook air 13, I don't know if that could be a factor.
Upvotes: 16
Views: 13251
Reputation: 1354
Like the other answer said you need to install bash first as alpine doesn't comes with bash installed. You need to install it with:
RUN apk update && apk add bash
Then you can switch the default shell from sh to bash with this line in your dockerfile
SHELL ["/bin/bash", "-c"]
The dockerfile should look like something like this
FROM node:10-alpine
RUN apk update && apk add bash
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
CMD bash # If you want to override CMD
Then you can launch you container with this line
docker run -it --rm <image-name> bash
or if you have overrided CMD you can simply do
docker run -it --rm <image-name>
Upvotes: 4
Reputation: 668
You may try a which bash
in your working container but there is most likely no Bash in this container image.
Try using a less slim image.
Upvotes: 0
Reputation: 4538
alpine
images doesn't have bash
installed out of box. You need to install it separately.
RUN apk update && apk add bash
How to use bash with an Alpine based docker image?
Upvotes: 32