MacBook M1上使用Node.js构建Docker镜像失败。

6

这是消息:

在此输入图片描述

出了什么问题?我应该等生产用的 Docker 吗?

这是 Docker 的配置:

# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY ./ .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
RUN mkdir /app
COPY --from=build-stage /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf

似乎其中一个依赖项需要将Python放在Docker镜像中。 - Tarun Lalwani
6个回答

10

尝试在linux/amd64上运行它。

更改您的Docker配置:

FROM node:lts-alpine as build-stage

为以下内容:

FROM --platform=linux/amd64 node:lts-alpine as build-stage


2

您需要安装Python、makeg++,以构建您的依赖项。

FROM node:14-alpine as frontbuild  
#RUN apk add --no-cache python2 make g++ WORKDIR /tmp

COPY ./front/package.json .

RUN apk add --update --no-cache python2 make gcc libsass g++

RUN npm install --no-optional  --only-production

COPY front /tmp

ARG VUE_APP_BASE_URL ENV VUE_APP_BASE_URL $VUE_APP_BASE_URL ENV NODE_ENV production

RUN npm run build

1

对我而言,这只有以下方法有效

更改

FROM node:14-alpine

to

FROM node:14

1

您需要在构建过程中安装Python。有关如何安装Python的更多详细信息,请查看此处

# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY ./ .
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
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
RUN mkdir /app
COPY --from=build-stage /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf
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

相同的循环,检查二进制文件/库/包是否缺失,如果是,则添加到Dockerfile中。如果您没有正确跟踪依赖项,则需要重复此过程多次,直到找到所有缺失的内容。 - jordanvrtanoski
我最近购买了一台MacBook m1,在Linux操作系统中,Docker文件没有问题。 - ShaSha
M1 是 ARM64,一些库/包仍然不支持 M1,但 node-gyp 不是这种情况,很可能是 C/C++ 构建环境安装的问题。在 Dockerfile 中添加 apk add alpine-sdk 并重新检查。 - jordanvrtanoski

1

对于我来说,Y H的解决方案是在FROM语句中添加--platform=linux/amd64

但如果您不想更改您的Dockerfile,在构建docker镜像之前也可以设置DOCKER_DEFAULT_PLATFORM

export DOCKER_DEFAULT_PLATFORM=linux/amd64


0

嗯,你需要Python。这里已经提供了答案,可能会提供给你所需的内容,而极简主义者可能正在寻找这样的东西。

另一个选择是不使用alpine版本的node(出于很好的原因,它具有最小化的占用空间)。我个人接受了更大镜像的开销,以节省安装Python的时间。因此,我的(可能是主观的)解决方案就是替换

# build stage
FROM node:lts-alpine as build-stage
...

使用

# build stage
FROM node:lts as build-stage
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接