gpt4 book ai didi

node.js - Docker+node.js : can't spawn phantomjs (ENOENT)

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:53 26 4
gpt4 key购买 nike

我正在运行一个使用html-pdf的node.js应用程序模块,而该模块又依赖于 phantomjs ,从 HTML 生成 PDF 文件。该应用程序使用 Docker 容器运行。

Dockerfile:

FROM node:8-alpine

WORKDIR /mydirectory
# [omitted] git clone, npm install etc....

RUN npm install -g html-pdf --unsafe-perm
VOLUME /mydirectory

ENTRYPOINT ["node"]

这可以很好地构建图像。

app.js

const witch = require('witch');
const pdf = require('html-pdf');
const phantomPath = witch('phantomjs-prebuilt', 'phantomjs');

function someFunction() {
pdf.create('some html content', { phantomPath: `${this._phantomPath}` });
}

// ... and then some other stuff that eventually calls someFunction()

然后调用 docker run <the image name> app.js

何时 someFunction被调用时,抛出以下错误消息:

Error: spawn /mydirectory/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs ENOENT

在云 Linux 服务器上或本地计算机上部署容器时都会发生这种情况。

我尝试添加 RUN npm install -g phantomjs-prebuilt --unsafe-perms到 Dockerfile,无济于事(这使得 docker 构建失败,因为 html-pdf 的安装无法验证 phantomjs 的安装)

我显然也不喜欢使用 --unsafe-perms npm install 的参数,所以如果有人有一个允许绕过它的解决方案,那就太棒了。

非常感谢任何帮助!

最佳答案

这就是最终为我工作的内容,以防这对任何人有帮助:

FROM node:8-alpine

WORKDIR /mydirectory
# [omitted] git clone, npm install etc....

ENV PHANTOMJS_VERSION=2.1.1
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
ENV PATH=$PATH:/home/node/.npm-global/bin
RUN apk update && apk add --no-cache fontconfig curl curl-dev && \
cd /tmp && curl -Ls https://github.com/dustinblackman/phantomized/releases/download/${PHANTOMJS_VERSION}/dockerized-phantomjs.tar.gz | tar xz && \
cp -R lib lib64 / && \
cp -R usr/lib/x86_64-linux-gnu /usr/lib && \
cp -R usr/share /usr/share && \
cp -R etc/fonts /etc && \
curl -k -Ls https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-${PHANTOMJS_VERSION}-linux-x86_64.tar.bz2 | tar -jxf - && \
cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs

USER node
RUN npm install -g html-pdf

VOLUME /mydirectory

ENTRYPOINT ["node"]

关于node.js - Docker+node.js : can't spawn phantomjs (ENOENT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063858/

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