【问题标题】:Macbook m1 node js docker image build failedMacbook m1节点js docker镜像构建失败
【发布时间】:2021-03-11 17:55:19
【问题描述】:

这是消息:

怎么了?我应该等待生产 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 映像中

标签: node.js docker apple-m1


【解决方案1】:

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

# 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。如果您意识到没有正确跟踪依赖项,则需要多次重复此循环,直到找到所有丢失的内容。
  • 我最近买了一台 MacBook m1,在 Linux os docker 文件没问题。
  • M1 是 ARM64,一些库/包仍然无法用于 M1,但 node-gyp 不是这样,这很可能是安装 C/C++ 构建环境的问题。将apk add alpine-sdk 添加到 Dockerfile 并检查 agin。
【解决方案2】:

您需要带有makeg++ 的python 来构建您的依赖项。

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

【讨论】:

    【解决方案3】:

    尝试使用 linux/amd64 运行它。

    在您的 docker 配置更改中:

    FROM node:lts-alpine as build-stage

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

    【讨论】:

      【解决方案4】:

      嗯,你需要 python。而这里已经提供的答案将为您提供这一点,而极简主义者可能正在寻找类似的东西。

      另一种选择是不使用高山版本的节点(这是有充分理由的,并且占用空间最小)。我个人接受了更大图像的开销,以通过不安装 python 来节省时间。所以我的(可能是固执己见的)解决方案就是替换

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

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

      【讨论】:

        猜你喜欢
        • 2022-11-29
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 2019-08-13
        • 2021-11-03
        相关资源
        最近更新 更多