【问题标题】:node installed in docker container but not npm节点安装在 docker 容器中,但未安装在 npm
【发布时间】:2021-04-15 16:12:53
【问题描述】:

我有这个 DockerFile

FROM docker:17.12.0-ce as static-docker-source

FROM ubuntu:18.04
FROM python:3.8-slim-buster

ARG CLOUD_SDK_VERSION=335.0.0
ENV CLOUD_SDK_VERSION=$CLOUD_SDK_VERSION
ENV PATH "$PATH:/opt/google-cloud-sdk/bin/"
COPY --from=static-docker-source /usr/local/bin/docker /usr/local/bin/docker
RUN apt-get -qqy update && apt-get install -qqy \
    curl \
    gcc \
    apt-transport-https \
    lsb-release \
    openssh-client \
    git \
    gnupg && \
pip install crcmod && \
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" > /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
apt-get update && \
apt-get install -y google-cloud-sdk=${CLOUD_SDK_VERSION}-0 \
    google-cloud-sdk-app-engine-python=${CLOUD_SDK_VERSION}-0 \
    google-cloud-sdk-app-engine-python-extras=${CLOUD_SDK_VERSION}-0 \
    google-cloud-sdk-cbt=${CLOUD_SDK_VERSION}-0 \
    kubectl && \
gcloud --version && \
docker --version && kubectl version --client
VOLUME ["/root/.config"]

RUN curl -sL https://deb.nodesource.com/setup_8.x | bash -
RUN curl -sL https://sentry.io/get-cli/ | bash -

RUN apt-get install -y nodejs build-essential pkg-config libcairo2-dev libjpeg-dev libgif-dev

ADD requirements.txt /
ADD requirements-prod.txt /

ADD submodules /
RUN python --version
RUN pip3 install --upgrade pip

RUN pip3 install -r /requirements.txt
RUN pip3 install -r /requirements-prod.txt

当我运行 node --version 它返回 v10.24.0 (我认为它应该是 8.x.y ....)。 当我运行 npm --version 它返回 bash: npm: command not found

node不应该也安装npm吗?

谢谢

【问题讨论】:

  • 您正在安装旧的 nodejs 版本:
  • RUN curl -sL https://deb.nodesource.com/setup_8.x | bash -
  • 尝试使用RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
  • 实际上,删除 FROM python:3.8-slim-buster 并通过 apt 添加 python 而不更改任何其他内容似乎可以解决问题。我知道这是 python 的旧版本,但这是一个旧项目,我不想升级它,冒着导致重大变化的风险......
  • 很高兴你这样解决了它,为什么不创建一个答案并将其标记为已接受。

标签: docker npm dockerfile


【解决方案1】:

所以我通过更改我的 DockerFile 来修复它。

我删除了 FROM python:3.8-slim-buster,因为我读到 dockerfile 上有多个“FROM”可能会导致冲突。我用这样的apt安装了python:

RUN apt-get -qqy update && apt-get install -qqy \
    curl \
    gcc \
    python3.8 \
    python3-pip \
    python3.8-dev \

但是对我来说并不完美,因为我现在在 python 3 下有 python3.6.x,在 python 下有 python 2.7.x,我必须在需要时指定 python3.8...


我的新 DockerFile:

FROM docker:17.12.0-ce as static-docker-source

FROM ubuntu:18.04

ARG CLOUD_SDK_VERSION=335.0.0
ENV CLOUD_SDK_VERSION=$CLOUD_SDK_VERSION
ENV PATH "$PATH:/opt/google-cloud-sdk/bin/"
COPY --from=static-docker-source /usr/local/bin/docker 
/usr/local/bin/docker
RUN apt-get -qqy update && apt-get install -qqy \
    curl \
    gcc \
    python3.8 \
    python3-pip \
    python3.8-dev \
    apt-transport-https \
    lsb-release \
    openssh-client \
    git \
    gnupg && \
pip3 install crcmod && \
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" > /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
apt-get update && \
apt-get install -y google-cloud-sdk=${CLOUD_SDK_VERSION}-0 \
    google-cloud-sdk-app-engine-python=${CLOUD_SDK_VERSION}-0 \
    google-cloud-sdk-app-engine-python-extras=${CLOUD_SDK_VERSION}-0 \
    google-cloud-sdk-cbt=${CLOUD_SDK_VERSION}-0 \
    kubectl && \
gcloud --version && \
docker --version && kubectl version --client
VOLUME ["/root/.config"]

RUN curl -sL https://deb.nodesource.com/setup_8.x | bash -
RUN curl -sL https://sentry.io/get-cli/ | bash -

RUN apt-get install -y nodejs build-essential pkg-config libcairo2-dev 
libjpeg-dev libgif-dev
RUN node --version
RUN npm --version
RUN python --version
ADD requirements.txt /
ADD requirements-prod.txt /

ADD submodules /
RUN python --version
RUN pip3 install --upgrade pip

RUN pip3 install -r /requirements.txt
RUN pip3 install -r /requirements-prod.txt

【讨论】:

  • 编辑队列已满..您能否编辑您的答案以使其更具描述性? ``` 所以我通过更改我的 DockerFile 来修复它: 1. 删除 FROM python:3.8-slim-buster 2. 通过 apt 添加 python 而不更改任何内容 ``
猜你喜欢
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2023-03-24
  • 1970-01-01
  • 2018-12-04
相关资源
最近更新 更多