我真的不熟悉docker,但我正在使用docker运行一个Web应用程序,它使用prisma/nexus当我尝试合成时,我得到这个错误:
Error: Unknown binaryTarget linux-arm-openssl-undefined and no custom binaries were provided
有人能告诉我这个错误是什么意思吗?我该怎么解决它?我认为这与Docker不支持我正在使用的操作系统有关,但我不完全确定。
xghobddn1#
从官方文件来看,Prisma客户端由三个主要组件组成。
虽然生成的代码是跨平台的(这是javascript),但query engine不是。当您运行prisma generate命令时,prisma似乎使用query engine,但它需要为当前平台otherwise it throws an error找到正确的二进制文件。问题是由于某种原因,我无法解释(因为我也有同样的问题),Docker中的平台不被识别为受支持的平台。我的猜测是,要么是Docker提供了错误的平台,要么是Prisma在某个时候有一个bug,错误消息linux-arm-openssl-undefined和undefined可能是问题的线索。解决方案:现在:我计划在x86计算机上运行我的图像这个问题得到修复的时间。最新的Docker 3 RC 2(5天前发布)也没有帮助。请注意,您可以在schema.prisma档案中指定binaryTargets。
query engine
prisma generate
linux-arm-openssl-undefined
undefined
schema.prisma
generator client { provider = "prisma-client-js" binaryTargets = ["debian-openssl-1.1.x"] }
但由于某些原因,即使我在debian上构建我的docker映像,这也不起作用。Prisma似乎识别出我在linux-arm上,但无法将binaryTarget与之关联。另外...这个平台真的准确吗?docker是在linux引擎盖下运行还是在rosetta下运行x86 debian?我不知道。[编辑]节点图像为多拱,即
linux-arm
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
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
af7jpaap3#
我在使用node:alpine时也遇到了同样的问题。首先,我尝试用apk add openssl手动安装openssl,但仍然出现了一些其他问题。我设法通过切换到node:lts并添加到我的Dockerfile RUN apt-get -qy update && apt-get -qy install openssl来解决这个问题
node:alpine
apk add openssl
node:lts
RUN apt-get -qy update && apt-get -qy install openssl
ffscu2ro4#
将您的基础映像从alpine更改为node,这应该可以解决您在M1上遇到的问题。更多信息
4条答案
按热度按时间xghobddn1#
从官方文件来看,
Prisma客户端由三个主要组件组成。
虽然生成的代码是跨平台的(这是javascript),但
query engine
不是。当您运行
prisma generate
命令时,prisma似乎使用query engine
,但它需要为当前平台otherwise it throws an error找到正确的二进制文件。问题是由于某种原因,我无法解释(因为我也有同样的问题),Docker中的平台不被识别为受支持的平台。
我的猜测是,要么是Docker提供了错误的平台,要么是Prisma在某个时候有一个bug,错误消息
linux-arm-openssl-undefined
和undefined
可能是问题的线索。解决方案:现在:我计划在x86计算机上运行我的图像这个问题得到修复的时间。最新的Docker 3 RC 2(5天前发布)也没有帮助。
请注意,您可以在
schema.prisma
档案中指定binaryTargets。但由于某些原因,即使我在debian上构建我的docker映像,这也不起作用。Prisma似乎识别出我在
linux-arm
上,但无法将binaryTarget与之关联。另外...这个平台真的准确吗?docker是在linux引擎盖下运行还是在rosetta下运行x86 debian?我不知道。[编辑]节点图像为多拱,即
我将为我的主机平台选择linux架构(linux/arm 64/v8)。看起来我们实际上可以使用build for x86 on m1 using buildx experimental feature according to this post
bybem2ql2#
Undefined意味着您没有在容器中安装openssl。您可以通过安装openssl来获得正确的二进制目标名称。将以下内容添加到Dockerfile:
请从此处回答https://github.com/prisma/prisma/issues/861#issuecomment-881992292
af7jpaap3#
我在使用
node:alpine
时也遇到了同样的问题。首先,我尝试用apk add openssl
手动安装openssl,但仍然出现了一些其他问题。我设法通过切换到
node:lts
并添加到我的DockerfileRUN apt-get -qy update && apt-get -qy install openssl
来解决这个问题ffscu2ro4#
将您的基础映像从alpine更改为node,这应该可以解决您在M1上遇到的问题。更多信息