You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Highcharts Export Server Docker部署无法导出静态图片求助

问题描述

环境信息

  • 操作系统:Windows 11 Enterprise
  • NodeJS版本:14.0.0
  • NPM版本:6.14.4
  • Highcharts Export Server版本:2.1.0

问题场景

本地手动运行index.js可成功导出Highcharts图片,但通过Docker镜像运行时出现语法错误。

Dockerfile内容

# Getting image from node
FROM node:carbon

ENV ACCEPT_HIGHCHARTS_LICENSE="1"
ENV HIGHCHARTS_USE_STYLED="1"
ENV HIGHCHARTS_USE_MAPS="1"
ENV HIGHCHARTS_USE_GANTT="1"

RUN npm install highcharts-export-server -g --unsafe-perm
RUN npm config set strict-ssl=false
RUN node /usr/local/lib/node_modules/highcharts-export-server/build.js

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

# Bundle app source
COPY . .

#CMD ls

EXPOSE 3001

CMD [ "node", "index.js" ] 

#ENTRYPOINT ["highcharts-export-server", "--enableServer", "1"]

导出API代码(index.js)

const chartExporter = require("highcharts-export-server");
chartExporter.initPool();    
let imageB64 = '';  
chartExporter.export(chartDetails, (err, res) => {
     imageB64 = res.data;             
        response.send(imageB64);
    chartExporter.killPool();
});

图表配置JSON(chartDetails)

const chartDetails = {
        type: "jpeg",
        options: {
            chart: {
                type: "pie"
            },
            title: {
                text: "Heading of Chart"
            },
            plotOptions: {
                pie: {
                    dataLabels: {
                        enabled: true,
                        format: "<b>{point.name}</b>: {point.y}"
                    }
                }
            },
            series: [
                {
                    data: [
                        {
                            name: "a",
                            y: 20
                        },
                        {
                            name: "b",
                            y: 20
                        },
                        {
                            name: "c",
                            y: 50
                        },
                        {
                            name: "d",
                            y: 10
                        }
                    ]
                }
            ],
            exporting: {
                sourceWidth: 200,
                sourceHeight: 200
            }
        }
    };

报错信息

Error : phantom worker 5/6/7/8/9 unexpected data - SyntaxError: Expected token ')'
  phantomjs://code/worker.js:658 in loop

解决方案

1. 对齐NodeJS版本

你本地用的是NodeJS 14.0.0,但Docker基础镜像node:carbon对应NodeJS 8.x版本,版本差异导致Highcharts Export Server运行时出现语法兼容问题。把Dockerfile开头的基础镜像换成和本地一致的版本:

FROM node:14.0.0

2. 调整安装命令顺序

将npm config set strict-ssl=false移到npm install之前,避免安装过程中出现SSL校验问题:

RUN npm config set strict-ssl=false
RUN npm install highcharts-export-server -g --unsafe-perm
RUN node /usr/local/lib/node_modules/highcharts-export-server/build.js

3. 修复index.js变量问题

你的代码里直接使用了chartDetails和response变量,但未正确定义或引入:

  • 确保chartDetails被定义在index.js中或通过模块引入
  • response是HTTP请求的响应对象,需在路由回调中获取(以Express为例)

修正后的index.js示例:

const express = require('express');
const app = express();
const chartExporter = require("highcharts-export-server");

// 定义图表配置
const chartDetails = {
    type: "jpeg",
    options: {
        chart: { type: "pie" },
        title: { text: "Heading of Chart" },
        plotOptions: {
            pie: {
                dataLabels: {
                    enabled: true,
                    format: "<b>{point.name}</b>: {point.y}"
                }
            }
        },
        series: [{
            data: [
                { name: "a", y: 20 },
                { name: "b", y: 20 },
                { name: "c", y: 50 },
                { name: "d", y: 10 }
            ]
        }],
        exporting: { sourceWidth: 200, sourceHeight: 200 }
    }
};

chartExporter.initPool();

// 导出接口
app.get('/export-chart', (req, response) => {
    chartExporter.export(chartDetails, (err, res) => {
        if (err) {
            return response.status(500).send(err.message);
        }
        response.send(res.data);
        chartExporter.killPool();
    });
});

app.listen(3001, () => {
    console.log('Export server running on port 3001');
});

4. 重新构建运行

删除旧镜像和容器后,重新构建并启动:

docker build -t highcharts-exporter .
docker run -p 3001:3001 highcharts-exporter

内容的提问来源于stack exchange,提问作者Jeet Bhatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:40:25