/bin/bash:npm:找不到命令(docker 容器)
/bin/bash: npm: command not found (docker container)
我已经用 nvm:
构建了一个 docker 图像
FROM ubuntu:19.10
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update && \
apt-get -y dist-upgrade && \
apt-get -y autoremove && \
apt-get clean all
RUN apt-get install -y \
git \
curl \
bash-completion
ARG NODE_VERSION='12.0.0'
ARG NVM_DIR=/root
ARG NVM_VERSION='v0.35.3'
RUN curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh" | bash \
&& source $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION
ENV TERM=xterm
现在我正在尝试测试我可以启动一个容器并且 运行 npm
:
docker run my-npm-image /bin/bash -c "npm --version"
但这给出了:
/bin/bash: npm: command not found
如果我改为:
docker run -it my-npm-image /bin/bash
root@laptop:/# npm --version
6.9.0
有效。所以 npm
安装在映像中,但如果不先 进入 容器,我无法 运行 它。
注意运行其他命令使用上述方法工作正常:
docker run my-npm-image /bin/bash -c "git --version"
git version 2.20.1
上面 docker 文件中 nvm
安装的 npm
有什么问题吗?
您可以使用 docker exec
来计算
docker exec -it <container-Id> npm --version
https://docs.docker.com/engine/reference/commandline/exec/
它也可以按照您提到的方式工作,这可能取决于您使用的图像或错误的配置
docker run -it node:12 /bin/bash -c "npm --version"
6.14.4
PATH
不知道 npm
位置,因为如果我明确设置 PATH
,它对我有用。
$ docker run --rm my-npm-image /bin/bash -c "PATH=/root/versions/node/v12.0.0/bin;$PATH npm --version"
6.9.0
要设置 npm
路径,请尝试将以下内容添加到您的 Dockerfile:
...
...
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
ENV TERM=xterm
参考:https://gist.github.com/remarkablemark/aacf14c29b3f01d6900d13137b21db3a
我已经用 nvm:
构建了一个 docker 图像FROM ubuntu:19.10
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN apt-get update && \
apt-get -y dist-upgrade && \
apt-get -y autoremove && \
apt-get clean all
RUN apt-get install -y \
git \
curl \
bash-completion
ARG NODE_VERSION='12.0.0'
ARG NVM_DIR=/root
ARG NVM_VERSION='v0.35.3'
RUN curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/$NVM_VERSION/install.sh" | bash \
&& source $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION
ENV TERM=xterm
现在我正在尝试测试我可以启动一个容器并且 运行 npm
:
docker run my-npm-image /bin/bash -c "npm --version"
但这给出了:
/bin/bash: npm: command not found
如果我改为:
docker run -it my-npm-image /bin/bash
root@laptop:/# npm --version
6.9.0
有效。所以 npm
安装在映像中,但如果不先 进入 容器,我无法 运行 它。
注意运行其他命令使用上述方法工作正常:
docker run my-npm-image /bin/bash -c "git --version"
git version 2.20.1
上面 docker 文件中 nvm
安装的 npm
有什么问题吗?
您可以使用 docker exec
docker exec -it <container-Id> npm --version
https://docs.docker.com/engine/reference/commandline/exec/
它也可以按照您提到的方式工作,这可能取决于您使用的图像或错误的配置
docker run -it node:12 /bin/bash -c "npm --version"
6.14.4
PATH
不知道 npm
位置,因为如果我明确设置 PATH
,它对我有用。
$ docker run --rm my-npm-image /bin/bash -c "PATH=/root/versions/node/v12.0.0/bin;$PATH npm --version"
6.9.0
要设置 npm
路径,请尝试将以下内容添加到您的 Dockerfile:
...
...
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
ENV TERM=xterm
参考:https://gist.github.com/remarkablemark/aacf14c29b3f01d6900d13137b21db3a