You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac构建含Prisma的Docker镜像时遇OpenSSL依赖错误

解决M1 Mac上Prisma + Node16 Slim Docker镜像的OpenSSL二进制目标错误

在M1芯片Mac上构建包含Prisma、基于node16-slim的Docker镜像,容器可正常挂载,但执行npm install或npm ci时出现如下错误:

bash-5.1# npm install

> prepare
> npm run prisma && ts-patch install -s 2>/dev/null || true


> prisma
> prisma generate --schema ./lib/database/myschema.prisma | prisma migrate dev --name init

Error: Unknown binaryTarget linux-arm64-openssl-undefined and no custom engine files were provided
Error: Unknown binaryTarget linux-arm64-openssl-undefined and no custom engine files were provided

up to date, audited 523 packages in 2s

65 packages are looking for funding
  run `npm fund` for details

已尝试修改Dockerfile(改用node-slim镜像、用apt-get安装openssl),修改后的Dockerfile如下:

FROM node:16-slim as base
WORKDIR /home

ARG DATABASE_URL=postgresql://admin:admin@postgres:5432/sales

RUN apt-get update && apt-get install -y \
  bash \
  nano \
  curl \
  python3 \
  build-base \
  openssl \
  && rm -rf /var/lib/apt/lists/*
RUN npm set cache /home/.npm && \
    npm set progress false && \
    npm set unsafe-perm true && \
    npm set no-audit true && \
    npm set prefer-offline true

WORKDIR /home

ADD .npm .npm
ADD package.json .
ADD package-lock.json .

RUN npm ci --no-optional

ADD . .
RUN npm run build


########################################################################################################################

FROM node:16-slim as test
WORKDIR /home
COPY --from=base /home .

ENTRYPOINT ["npm", "run"]

########################################################################################################################

FROM node:16-slim as development

WORKDIR /home
RUN apt-get update && apt-get install -y \
  bash \
  nano \
  curl \
  python3 \
  build-base \
  openssl \
  && rm -rf /var/lib/apt/lists/*
RUN npm set cache /home/.npm && \
    npm set progress false && \
    npm set unsafe-perm true && \
    npm set no-audit true
COPY --from=base /home .

ENTRYPOINT ["npm", "run"]
CMD ["shell"]

########################################################################################################################

FROM node:16-slim as prepare-production
RUN apt-get update && apt-get install -y \
  bash \
  nano \
  curl \
  python3 \
  build-base \
  openssl \
  && rm -rf /var/lib/apt/lists/*
RUN npm set cache /home/.npm && \
    npm set progress false && \
    npm set unsafe-perm true && \
    npm set no-audit true
RUN apt-get install -y openssl
WORKDIR /home
COPY --from=base /home .
RUN npm prune --production

########################################################################################################################

FROM node:16-slim as production
WORKDIR /home

COPY --from=prepare-production /home .


ENTRYPOINT ["npm", "run"]
CMD ["start"]

执行docker system prune并重新构建镜像后,问题依旧。


解决方案

1. 明确指定Prisma二进制目标

在项目的package.json中添加Prisma配置,指定适配linux-arm64的OpenSSL版本:

{
  "prisma": {
    "binaryTargets": ["linux-arm64-openssl-1.1.x"]
  }
}

也可以直接在Prisma命令中追加参数:

prisma generate --schema ./lib/database/myschema.prisma --binary-target linux-arm64-openssl-1.1.x

2. 在Dockerfile中设置Prisma环境变量

在base阶段的RUN npm ci --no-optional之前添加环境变量,确保安装过程中识别正确的目标平台:

ENV PRISMA_CLI_BINARY_TARGETS=linux-arm64-openssl-1.1.x

3. 升级Prisma版本(可选)

部分旧版Prisma对arm64架构的OpenSSL版本识别存在缺陷,升级到4.x及以上的稳定版本,可修复兼容性问题。修改package.json中的prisma和@prisma/client版本后,重新生成package-lock.json。

4. 指定Docker构建平台(M1专属)

M1为arm64架构,构建镜像时需明确指定平台,避免交叉编译导致的二进制不匹配:

docker build --platform linux/arm64 -t your-image-name .

或在Dockerfile开头直接声明平台:

FROM --platform=linux/arm64 node:16-slim as base

内容的提问来源于stack exchange,提问作者altho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:40:26