使用Docker Apple M1时出现Docker排版问题

lp0sw83n  于 2022-11-02  发布在  Docker
关注(0)|答案(4)|浏览(262)

我真的不熟悉docker,但我正在使用docker运行一个Web应用程序,它使用prisma/nexus
当我尝试合成时,我得到这个错误:

Error: Unknown binaryTarget linux-arm-openssl-undefined and no custom binaries were provided

有人能告诉我这个错误是什么意思吗?我该怎么解决它?我认为这与Docker不支持我正在使用的操作系统有关,但我不完全确定。

xghobddn

xghobddn1#

从官方文件来看,
Prisma客户端由三个主要组件组成。

  • JavaScript客户端程式库
  • TypeScript类型定义
  • 查询引擎(以二进制文件的形式)

虽然生成的代码是跨平台的(这是javascript),但query engine不是。
当您运行prisma generate命令时,prisma似乎使用query engine,但它需要为当前平台otherwise it throws an error找到正确的二进制文件。
问题是由于某种原因,我无法解释(因为我也有同样的问题),Docker中的平台不被识别为受支持的平台。
我的猜测是,要么是Docker提供了错误的平台,要么是Prisma在某个时候有一个bug,错误消息linux-arm-openssl-undefinedundefined可能是问题的线索。
解决方案:现在:我计划在x86计算机上运行我的图像这个问题得到修复的时间。最新的Docker 3 RC 2(5天前发布)也没有帮助。
请注意,您可以在schema.prisma档案中指定binaryTargets。

generator client {
  provider = "prisma-client-js"
  binaryTargets = ["debian-openssl-1.1.x"]
}

但由于某些原因,即使我在debian上构建我的docker映像,这也不起作用。Prisma似乎识别出我在linux-arm上,但无法将binaryTarget与之关联。另外...这个平台真的准确吗?docker是在linux引擎盖下运行还是在rosetta下运行x86 debian?我不知道。
[编辑]节点图像为多拱,即

FROM node:15.12.0-buster-slim AS builder

我将为我的主机平台选择linux架构(linux/arm 64/v8)。看起来我们实际上可以使用build for x86 on m1 using buildx experimental feature according to this post

bybem2ql

bybem2ql2#

Undefined意味着您没有在容器中安装openssl。您可以通过安装openssl来获得正确的二进制目标名称。将以下内容添加到Dockerfile:

FROM node:16-slim
RUN apt-get update
RUN apt-get install -y openssl

请从此处回答https://github.com/prisma/prisma/issues/861#issuecomment-881992292

af7jpaap

af7jpaap3#

我在使用node:alpine时也遇到了同样的问题。首先,我尝试用apk add openssl手动安装openssl,但仍然出现了一些其他问题。
我设法通过切换到node:lts并添加到我的Dockerfile RUN apt-get -qy update && apt-get -qy install openssl来解决这个问题

ffscu2ro

ffscu2ro4#

将您的基础映像从alpine更改为node,这应该可以解决您在M1上遇到的问题。更多信息

相关问题