Docker 安装 npm 后找不到图像错误 bin
Docker image erorr bin not found after npm installation
我需要扩展 Dockerfile 并向其添加grunt
。我做了以下事情:
这个docker运行原样
FROM openjdk:8-jdk-slim
ARG ND=v12.13.0
RUN apt-get update && \
apt-get install --yes --no-install-recommends curl && \
NODE_H=/opt/nodejs; mkdir -p ${NODE_H} && \
curl --fail --silent --output - "http://nodejs.org/dist/${ND}/node-${ND}-linux-x64.tar.gz" \
| tar -xzv -f - -C "${NODE_H}" && \
ln -s "${NODE_H}/node-${ND}-linux-x64/bin/npm" /usr/local/bin/npm && \
ln -s "${NODE_H}/node-${ND}-linux-x64/bin/node" /usr/local/bin/node && \
ln -s "${NODE_H}/node-${ND}-linux-x64/bin/npx" /usr/local/bin/ && \
npm install grunt-cli -g
RUN grunt -v
我还添加了以下内容,但没有帮助...
ENV PATH="$PATH:/usr/local/bin"
当我 运行 命令 grunt-v
我得到以下错误:
/bin/sh: 1: grunt: not found
。
我也尝试通过 npm install grunt -g
安装 g运行t 但没有成功。知道如何解决吗?
g运行t docker 构建
的输出
/opt/nodejs/node-v12.13.0-linux-x64/bin/grunt -> /opt/nodejs/node-v12.13.0-linux-x64/lib/node_modules/grunt-cli/bin/grunt
+ grunt-cli@1.3.2
我需要 g运行t 命令在此 docker 图像中可用
我无法更改 docker 图像,即表格 jdk...这是给定的
更新
我也尝试过 VonC 的建议,但仍然有问题,
FROM openjdk:8-jdk-slim
ARG ND=v12.13.0
RUN apt-get update && \
apt-get install --yes --no-install-recommends curl && \
# install node
NODE_HOME=/opt/nodejs; mkdir -p ${NODE_HOME} && \
curl --fail --silent --output - "http://nodejs.org/dist/${ND}/node-${ND}-linux-x64.tar.gz" \
| tar -xzv -f - -C "${NODE_HOME}" && \
ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/node" /usr/local/bin/node && \
ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/npm" /usr/local/bin/npm && \
ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/npx" /usr/local/bin/ && \
npm install -g grunt-cli
ENV PATH="${PATH}:/usr/local/bin"
RUN ls /usr/local/bin/
RUN grunt -v
ls 命令returns
docker-java-home
node
npm
npx
知道缺少什么吗?
I've put also the following which doesn't help...
ENV PATH="$PATH:/usr/local/bin"
作为illustrated here,这应该足够了,确切的语法也是(当然)
ENV PATH="${PATH}:/usr/local/bin"
但是:
- 确保在最后一个
RUN grunt
之前添加它
- 添加
RUN ls /usr/local/bin/
以查看您的安装命令是否有效
- 尝试使用 syntax
npm instal -g grunt
,而不是 npm instal grunt -g
另一种方法:
Docker图像openjdk:8-jdk-slim基于debian:buster-slim
所以尝试通过它的安装脚本安装节点,如seen here:
# install node.js environment
RUN apt-get update && \
apt-get install -y --no-install-recommends \
gnupg && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN curl -sL https://deb.nodesource.com/setup_${NODEJS_VERSION}.x | bash -
RUN apt-get update && \
apt-get install -y --no-install-recommends \
nodejs && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
npm install -g grunt
您仍然可以使用相同的基础映像 openjdk:8-jdk-slim
,但您只需使用常规节点安装来扩展它,而不是摆弄符号链接。
对于您的情况,请先添加 ENV NODEJS_VERSION 12
。
这个有效
FROM openjdk:8-jdk-slim
ARG NODE_HOME=/opt/nodejs
ARG ND=v12.13.0
ENV PATH=${PATH}:${NODE_HOME}/node-${ND}-linux-x64/bin/
RUN apt-get update && \
apt-get install --yes --no-install-recommends curl && \
# install node
mkdir -p ${NODE_HOME} && \
curl --fail --silent --output - "http://nodejs.org/dist/${ND}/node-${ND}-linux-x64.tar.gz" \
| tar -xzv -f - -C "${NODE_HOME}" && \
npm install -g grunt-cli
RUN grunt -v
首先,在您的 dockerfile 中向上移动 NODE_HOME 并将其设置为构建参数。
这样我们就可以提前设置 PATH。
通过设置节点 bin 文件夹的路径,我们可以使用该位置的所有二进制文件,而无需手动链接每个文件。这意味着 grunt 在安装后可用,无需额外的黑魔法。
这会起作用:
FROM openjdk:8-jdk-slim
ARG ND=v12.13.0
RUN apt-get update && \
apt-get install --yes --no-install-recommends curl \
&& NODE_HOME=/opt/nodejs; mkdir -p ${NODE_HOME} \
&& curl --fail --silent --output - "http://nodejs.org/dist/${ND}/node-${ND}-linux-x64.tar.gz" \
| tar -xzv -f - -C "${NODE_HOME}" \
&& ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/node" /usr/local/bin/node \
&& ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/npm" /usr/local/bin/npm \
&& ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/npx" /usr/local/bin/ \
&& npm install --prefix /usr/local/ -g grunt-cli
ENV PATH="${PATH}:/usr/local/bin"
RUN ls /usr/local/bin
RUN grunt -v
使用 --prefix
将告诉 npm 在 /usr/local/bin
中安装 grunt
ls 输出:
Step 5/6 : RUN ls /usr/local/bin
---> Running in 96493743512d
docker-java-home
grunt
node
npm
npx
grunt -v 输出:
Step 6/6 : RUN grunt -v
---> Running in c6248c4fce6c
grunt-cli: The grunt command line interface (v1.3.2)
我需要扩展 Dockerfile 并向其添加grunt
。我做了以下事情:
这个docker运行原样
FROM openjdk:8-jdk-slim
ARG ND=v12.13.0
RUN apt-get update && \
apt-get install --yes --no-install-recommends curl && \
NODE_H=/opt/nodejs; mkdir -p ${NODE_H} && \
curl --fail --silent --output - "http://nodejs.org/dist/${ND}/node-${ND}-linux-x64.tar.gz" \
| tar -xzv -f - -C "${NODE_H}" && \
ln -s "${NODE_H}/node-${ND}-linux-x64/bin/npm" /usr/local/bin/npm && \
ln -s "${NODE_H}/node-${ND}-linux-x64/bin/node" /usr/local/bin/node && \
ln -s "${NODE_H}/node-${ND}-linux-x64/bin/npx" /usr/local/bin/ && \
npm install grunt-cli -g
RUN grunt -v
我还添加了以下内容,但没有帮助...
ENV PATH="$PATH:/usr/local/bin"
当我 运行 命令 grunt-v
我得到以下错误:
/bin/sh: 1: grunt: not found
。
我也尝试通过 npm install grunt -g
安装 g运行t 但没有成功。知道如何解决吗?
g运行t docker 构建
的输出/opt/nodejs/node-v12.13.0-linux-x64/bin/grunt -> /opt/nodejs/node-v12.13.0-linux-x64/lib/node_modules/grunt-cli/bin/grunt
+ grunt-cli@1.3.2
我需要 g运行t 命令在此 docker 图像中可用
我无法更改 docker 图像,即表格 jdk...这是给定的
更新
我也尝试过 VonC 的建议,但仍然有问题,
FROM openjdk:8-jdk-slim
ARG ND=v12.13.0
RUN apt-get update && \
apt-get install --yes --no-install-recommends curl && \
# install node
NODE_HOME=/opt/nodejs; mkdir -p ${NODE_HOME} && \
curl --fail --silent --output - "http://nodejs.org/dist/${ND}/node-${ND}-linux-x64.tar.gz" \
| tar -xzv -f - -C "${NODE_HOME}" && \
ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/node" /usr/local/bin/node && \
ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/npm" /usr/local/bin/npm && \
ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/npx" /usr/local/bin/ && \
npm install -g grunt-cli
ENV PATH="${PATH}:/usr/local/bin"
RUN ls /usr/local/bin/
RUN grunt -v
ls 命令returns
docker-java-home
node
npm
npx
知道缺少什么吗?
I've put also the following which doesn't help...
ENV PATH="$PATH:/usr/local/bin"
作为illustrated here,这应该足够了,确切的语法也是(当然)
ENV PATH="${PATH}:/usr/local/bin"
但是:
- 确保在最后一个
RUN grunt
之前添加它
- 添加
RUN ls /usr/local/bin/
以查看您的安装命令是否有效 - 尝试使用 syntax
npm instal -g grunt
,而不是npm instal grunt -g
另一种方法:
Docker图像openjdk:8-jdk-slim基于debian:buster-slim
所以尝试通过它的安装脚本安装节点,如seen here:
# install node.js environment
RUN apt-get update && \
apt-get install -y --no-install-recommends \
gnupg && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN curl -sL https://deb.nodesource.com/setup_${NODEJS_VERSION}.x | bash -
RUN apt-get update && \
apt-get install -y --no-install-recommends \
nodejs && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
npm install -g grunt
您仍然可以使用相同的基础映像 openjdk:8-jdk-slim
,但您只需使用常规节点安装来扩展它,而不是摆弄符号链接。
对于您的情况,请先添加 ENV NODEJS_VERSION 12
。
这个有效
FROM openjdk:8-jdk-slim
ARG NODE_HOME=/opt/nodejs
ARG ND=v12.13.0
ENV PATH=${PATH}:${NODE_HOME}/node-${ND}-linux-x64/bin/
RUN apt-get update && \
apt-get install --yes --no-install-recommends curl && \
# install node
mkdir -p ${NODE_HOME} && \
curl --fail --silent --output - "http://nodejs.org/dist/${ND}/node-${ND}-linux-x64.tar.gz" \
| tar -xzv -f - -C "${NODE_HOME}" && \
npm install -g grunt-cli
RUN grunt -v
首先,在您的 dockerfile 中向上移动 NODE_HOME 并将其设置为构建参数。
这样我们就可以提前设置 PATH。
通过设置节点 bin 文件夹的路径,我们可以使用该位置的所有二进制文件,而无需手动链接每个文件。这意味着 grunt 在安装后可用,无需额外的黑魔法。
这会起作用:
FROM openjdk:8-jdk-slim
ARG ND=v12.13.0
RUN apt-get update && \
apt-get install --yes --no-install-recommends curl \
&& NODE_HOME=/opt/nodejs; mkdir -p ${NODE_HOME} \
&& curl --fail --silent --output - "http://nodejs.org/dist/${ND}/node-${ND}-linux-x64.tar.gz" \
| tar -xzv -f - -C "${NODE_HOME}" \
&& ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/node" /usr/local/bin/node \
&& ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/npm" /usr/local/bin/npm \
&& ln -s "${NODE_HOME}/node-${ND}-linux-x64/bin/npx" /usr/local/bin/ \
&& npm install --prefix /usr/local/ -g grunt-cli
ENV PATH="${PATH}:/usr/local/bin"
RUN ls /usr/local/bin
RUN grunt -v
使用 --prefix
将告诉 npm 在 /usr/local/bin
ls 输出:
Step 5/6 : RUN ls /usr/local/bin
---> Running in 96493743512d
docker-java-home
grunt
node
npm
npx
grunt -v 输出:
Step 6/6 : RUN grunt -v
---> Running in c6248c4fce6c
grunt-cli: The grunt command line interface (v1.3.2)