gpt4 book ai didi

node.js - Docker,无法启动服务 : Failed to start a new language worker for runtime: node. Apple M1 有问题吗?

转载 作者:行者123 更新时间:2023-12-02 05:59:33 25 4
gpt4 key购买 nike

Part of my dockerfile:

FROM node:18-alpine as installer
WORKDIR /app
ENV NODE_ENV=development
COPY package*.json .
COPY tsconfig.json .
RUN npm ci

FROM node:18-alpine as builder
WORKDIR /app
ENV NODE_ENV=development
COPY --from=installer /app/ .
COPY src/ ./src/
RUN npm run build

我的 docker-compose.yml 的一部分

version: '3.8'

services:
function-app:
container_name: function-app
restart: always
depends_on:
- mongo
build: .
environment:
- DB_HOST=mongo:27017
- DB_USERNAME=qq
- DB_PASSWORD=qq
ports:
- 1337:80
volumes:
- ./dist/:/home/site/wwwroot/

这适用于我所有的同事。

我得到了这个:

enter image description here

我尝试更改为 FROM --platform=linux/amd64 node:18-alpine 作为安装程序

没有效果。

我是团队中唯一运行 Apple M1 计算机的人。也许这就是问题所在?

有什么建议可能是什么问题以及如何解决它吗?

更新

我重新安装了docker。出现新错误:“功能未实现”这指向我这里:https://github.com/Azure/azure-functions-core-tools/issues/2901

该主题的摘要:目前没有针对 M1 的解决方案。

因此我们在项目中放弃了 docker(目前不是最受欢迎的团队成员)。

感谢您的所有回答!

最佳答案

在下面发布的我的原始答案中,我试图帮助您创建一个能够运行 Apple M1 arm64 架构的 Node 镜像,但问题的原因可能是另一个。

您在 Docker 文件中包含了正在使用的 installerbuilder 镜像,但是根据您提供的错误,您似乎正在使用 Azure Functions for node docker image .

如果是这样的话,目前看来,正如您在 this 中看到的那样或this other Github问题,该镜像尚不支持arm64架构。您还可以查看 Docker Hub 中不同标签的列表来验证它。 .

您可以尝试按照this post中的建议构建自己的图像。 ,但我不知道这是否是一个可能的解决方案。

我认为使用 Apple M1 以及我之前的答案中建议的方法或类似的方法为 amd64 构建镜像应该没有任何问题;结果图像应该能够在 linux amd64 中运行而不会出现进一步的问题。唯一的问题是尝试在arm64 中运行它。

为了提供上下文,我的原始答案如下。

我的第一句话应该是,我没有机会使用Apple M1电脑,因此以下答案仅基于假设,而不是我想要的事实:请将此仅作为一般指导,背景信息,而不是真正的答案,因为我不确定它是否有效。

该错误表明您的 Functions 运行时可以正确启动。

这可能是由不同的原因引起的,并且由于使用 Apple Silicon M1 的不同芯片组架构而使用不受支持的 node 版本可能就是其中之一。

它可能没有任何效果,但您可以尝试为不同的架构显式构建图像。

Docker documentation 中很好地描述了构建多平台图像的过程。 .

该文档提供了 getting started section这表明设置构建系统需要执行的不同步骤。

基本上,作为第一步,您可能需要基于 docker container driver 创建一个新的构建器:

docker buildx create --name my-builder --driver docker-container --use

如文档中所述:

Using the docker-container driver has a couple of advantages over the basicdocker driver. Firstly, we can manually override the version of buildkit touse, meaning that we can access the latest and greatest features as soon asthey’re released, instead of waiting to upgrade to a newer version ofDocker. Additionally, we can access more complex features like multi-architecture builds and the more advanced cache exporters, which arecurrently unsupported in the default docker driver.

创建的构建器应该出现在可用构建器的列表中。您可以发出以下命令来验证它:

docker buildx ls

如上述 Docker 文档中所述,根据您的设置,可能需要安装以下内容以提供对其他平台的支持:

docker run --privileged --rm tonistiigi/binfmt --install all

请考虑阅读此related SO question .

如果一切正常,您应该能够使用目录中的以下内容构建图像:

docker buildx build --platform linux/arm64 -t your_image --load .

上述命令假设您没有使用注册表,并且图像将被存储 locally :仅当您提供单一平台目标时,它才有效。

请注意,我使用的是 linux/arm64 而不是 linux/amd64:老实说,我对此有点困惑,但我认为您应该使用其中的平台您的应用程序应该会遇到。 This great article一般来说,来自 docker 博客提供了我读过的关于 docker 多平台构建如何工作的更好的解释之一;特别是,它为不同的 variables 提供了很好的指导。您可以使用它来使您的 Dockerfile 可跨不同平台移植。

生成的图像稍后可以在 docker-compose 中使用:

version: '3.8'

services:
function-app:
container_name: function-app
restart: always
depends_on:
- mongo
image: your_image
environment:
- DB_HOST=mongo:27017
- DB_USERNAME=qq
- DB_PASSWORD=qq
ports:
- 1337:80
volumes:
- ./dist/:/home/site/wwwroot/

当我看到你的问题时,我正在深入研究这个问题,并且“似乎”docker-compose无法按照描述构建图像:这就是我使用docker buildx命令的原因直接地。请考虑评论this SO question以及以下 Docker Desktop documentation关于这个问题。

关于node.js - Docker,无法启动服务 : Failed to start a new language worker for runtime: node. Apple M1 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73863438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com