gpt4 book ai didi

docker - docker 内 alpine 上的节点 Canvas

转载 作者:行者123 更新时间:2023-12-02 07:01:59 26 4
gpt4 key购买 nike

我正在尝试在 Docker 内的 Alpine 上安装节点 Canvas ( https://github.com/Automattic/node-canvas )。

这些是我的 Dockerfile(部分):

# Use node/alpine image for final build
FROM keymetrics/pm2:latest-alpine as app

# install dependencies for canvas
RUN apk --no-cache --virtual .build-deps add \
python \
make \
g++ \
gcc \
&& apk --no-cache --virtual .canvas-build-deps add \
build-base \
cairo-dev \
jpeg-dev \
pango-dev \
giflib-dev \
pixman-dev \
pangomm-dev \
libjpeg-turbo-dev \
freetype-dev \
&& apk --no-cache add \
pixman \
cairo \
pango \
giflib
RUN apk add --update --repository http://dl-3.alpinelinux.org/alpine/edge/testing libmount ttf-dejavu ttf-droid ttf-freefont ttf-liberation ttf-ubuntu-font-family fontconfig

# Install dependencies
RUN npm install --prod
RUN npm rebuild canvas --build-from-source

当我尝试启动 docker 容器时,出现以下错误:

Error: Error relocating /var/www/app/node_modules/canvas/build/Release/canvas.node: FcConfigGetCurrent: symbol not found
at Object.Module._extensions..node (internal/modules/cjs/loader.js:775:18)
at Module.load (internal/modules/cjs/loader.js:626:32)
at tryModuleLoad (internal/modules/cjs/loader.js:566:12)
at Function.Module._load (internal/modules/cjs/loader.js:558:3)
at Module.require (internal/modules/cjs/loader.js:663:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/var/www/app/node_modules/canvas/lib/bindings.js:3:18)
at Module._compile (internal/modules/cjs/loader.js:734:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:745:10)
at Module.load (internal/modules/cjs/loader.js:626:32)
at tryModuleLoad (internal/modules/cjs/loader.js:566:12)
at Function.Module._load (internal/modules/cjs/loader.js:558:3)
at Module.require (internal/modules/cjs/loader.js:663:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/var/www/app/node_modules/canvas/lib/canvas.js:9:18)
at Module._compile (internal/modules/cjs/loader.js:734:30)

我猜测这与 Alpine 使用 musl 而不是 glibc 的事实有关,但我认为从源代码重建 Canvas npmrebuildcanvas --build-from-source 会是够了。

我已经尝试过 https://github.com/Automattic/node-canvas/issues 的大部分建议但没有一个对我有用。

有什么建议吗?

最佳答案

好的,这是一个答案——在官方 node:10.16.0-alpine Docker 镜像下安装 node-canvas v2.5 的方法。您可能知道,您发布的错误“错误重新定位...canvas.node”表示您的构建失败。这是因为 canvas 使用 glibc 而 alpine 使用 musl。 Canvas 需要链接到glibc,因此您需要将其添加到您的图像中。 Sasha Gerrand 优惠alpine-pkg-glibc作为一种方法。使用他的安装说明,它在 docker 文件中的外观如下:

    #  geo_core layer
# build on a node image, in turn built on alpine linux, Docker's official linux pulled from hub.docker.com
FROM node:10.16.0-alpine

# add libraries; sudo so non-root user added downstream can get sudo
RUN apk add --no-cache \
sudo \
curl \
build-base \
g++ \
libpng \
libpng-dev \
jpeg-dev \
pango-dev \
cairo-dev \
giflib-dev \
python \
;

# add glibc and install canvas
RUN apk --no-cache add ca-certificates wget && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk && \
apk add glibc-2.29-r0.apk && \
npm install canvas@2.5.0
;

关于docker - docker 内 alpine 上的节点 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57088230/

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