我正在运行一个使用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
的安装)
我显然也不喜欢使用npm install的--unsafe-perms
参数,因此,如果有人可以绕过该解决方案,那就太好了。
非常感谢您的帮助!
答案 0 :(得分:0)
我有一个类似的问题,对我来说,唯一的解决方法是手动下载和复制幻像。这是我来自docker文件的示例,应该排在EXPOSE comand之前。顺便说一句,我使用的是node:10.15.3
图片。
RUN wget -O /tmp/phantomjs-2.1.1-linux-x86_64.tar.bz2 https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
RUN mkdir /tmp/phantomjs && mkdir -p /usr/local/lib/node_modules/phantomjs/lib/phantom/
RUN tar xvjf /tmp/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /tmp/phantomjs
RUN mv /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64/* /usr/local/lib/node_modules/phantomjs/lib/phantom/
RUN rm -rf /tmp/phantomjs-2.1.1-linux-x86_64.tar.bz && rm -rf /tmp/phantomjs
别忘了更新您的路径。这只是解决方法,我还没有时间弄清楚。
答案 1 :(得分:0)
如果对任何人有帮助,这就是最终为我工作的原因:
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"]
答案 2 :(得分:0)
我在 2021 年 3 月遇到了这个问题,并且在 dockerizing highcharts 时遇到了同样的问题:它在我的机器上运行但在 docker run 上失败(同样的 spawn phantomjs 错误)。最后,解决方案是找到一个有效的 FROM 节点版本。这个 Dockerfile 使用最新的 Node docker 镜像和几乎最新的 highcharts npm 版本(总是选择特定的 npm 版本):
FROM node:15.12.0
ENV ACCEPT_HIGHCHARTS_LICENSE YES
# see available versions of highcharts at https://www.npmjs.com/package/highcharts-export-server
RUN npm install highcharts-export-server@2.0.30 -g
EXPOSE 7801
# run the container using: docker run -p 7801:7801 -t CONTAINER_TAG
CMD [ "highcharts-export-server", "--enableServer", "1" ]