在 Docker 构建期间未找到 npm

问题描述 投票:0回答:1

我对 Docker、node 等非常菜鸟,但花了几个小时寻找解决方案,但没有找到任何东西。我的 Dockerfile 非常简单:

# Added to fix building on ARM64 - causing error on AWS
FROM --platform=linux/amd64 python:3.7-alpine

# Set the working directory inside the Docker container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json for installing dependencies
COPY package*.json ./

# Install dependencies defined in package.json
RUN npm install

etc....

在这个目录中我运行

Docker build -t my-web-app .

它继续了一会儿,然后失败了,如下所示:

 > [4/6] RUN npm install:
0.130 /bin/sh: npm: not found

但是从命令行我可以让 npm 和 node 返回它们的版本,所以它们是可用的。它们的位置位于 $PATH 中。如果我转到 npm 文件,它会链接到 npm-cli.js,其中显示:

#!/usr/bin/env node
require('../lib/cli.js')(process)

我检查了环境中的路径,没有任何错误。

如果我运行

/bin/sh npm -v
作为测试,我会收到不同的错误:
line 2: syntax error near unexpected token
'../lib/cli.js''`。该文件存在于该位置并且看起来合理。

这是节点 - v20.12.2 和 npm - 10.5.0 的全新安装

我首先使用brew安装并删除了node,然后使用docker,然后使用nvm,最后使用来自nodejs.org的MacOS ARM64安装程序。我正在使用 bash 而不是 zsh。我使用的是 M1 Macbook Pro。

已经查看了这里的大多数类似帖子,它们看起来都复杂得多。这似乎是某种路径问题,但我没有看到它。

我对 npm-cli.js 文件的第二行进行了修改 - 删除引号,删除(进程)部分等,偶然它是这样简单的事情。

npm dockerfile
1个回答
0
投票

所以谈论 docker 时有两种不同的上下文:

  • “主机”本质上是您的计算机(无论安装了 docker)
  • “构建”上下文是运行时创建的单独上下文
    docker build ...

当您运行

docker build ...
时,docker会创建一个构建上下文,在其中执行您的Dockerfile。您可以将此构建上下文视为运行虚拟机,而 python-alpine 映像是您的基础映像。 Dockerfile 中的所有 docker 命令都在 python-alpine 映像内运行,而不是在您的主机上运行(请再阅读最后一句)。

因此,您的主机可能安装了node、npm、MS Office……无论安装了什么……但 python-alpine 映像都没有这些。 “Alpine”基本上是最小、最轻的 Linux 版本 - 所以当你看到像 python-alpine 这样的镜像时,你基本上得到了一个非常小的 linux 镜像,除了安装了 python(未安装节点)之外没有其他任何东西。类似地,节点分发节点高山图像,除了安装节点外没有其他任何东西(未安装Python)。

因此,如果您想同时运行 Node 和 Python,则需要选择一个用作“基本”映像,然后可以在其上安装另一个。我最熟悉的是从node开始,然后安装python:

FROM node:20-alpine

# Install python/pip
# Taken from https://stackoverflow.com/questions/62554991/how-do-i-install-python-on-alpine-linux
ENV PYTHONUNBUFFERED=1
RUN apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python
RUN python3 -m ensurepip
RUN pip3 install --no-cache --upgrade pip setuptools
© www.soinside.com 2019 - 2024. All rights reserved.