繁体   English   中英

如何为在 docker 容器内运行的快速服务器启用 xvfb?

[英]How to enable xvfb for an express server running inside a docker container?

我有一个在 docker 容器内运行的快速服务器。 一旦用户对端点进行 REST 调用,它应该使用 Babylon.js 从不同角度对随机生成的网格进行多个内存截图,对其进行一些图像处理,从中创建 PDF 并返回生成的 PDF 并返回生成的 ZBCD1B68617DFC0403文件给用户。

为此,我尝试使用headless-gl为 Babylon.js 引擎提供虚拟帧缓冲区。

据我了解,我首先需要获取 gl 上下文,然后将其传递给巴比伦引擎:

var gl = require(‘gl’)(1024, 768, { preserveDrawingBuffer: true });

var engine = new BABYLON.Engine(gl, true, { disableWebGL2Support: true });

我的问题是我无法初始化 gl 并且它返回null

在我的 Dockerfile 中,我使用以下内容安装xvfb的依赖项:

RUN apt-get update && apt-get install -y
libgl1-mesa-dri
libglapi-mesa
libosmesa6
mesa-utils
xvfb
&& apt-get clean

我的服务器也依赖于 mongo DB,因此在我的 docker-compose.yml 文件中,我等待 DB 容器初始化,然后再加载我的 express 容器:

command: wait-for.sh mongodb:27017 – …/node_modules/.bin/nodemon --inspect=0.0.0.0:9229 ./server.js

我想我需要使用正确的命令更新我的 Dockerfile 和 docker-compose 文件,以在运行节点应用程序之前加载xvfb ,但我不知道该怎么做。

我尝试了以下以及其他一些组合,但到目前为止没有运气:

command: wait-for.sh mongodb:27017 – xvfb-run -s “-ac -screen 0 1280x1024x24” node ./server.js

如果有人可以帮助我解决问题,我将不胜感激。

我认为您缺少服务器编号作为参数。 我正在使用xvfb-run --auto-servernum <command>来自动获得一个免费的。 默认值为 99。

您也可以手动使用 Xvfb,并将 DISPLAY 环境变量设置为:99 (默认服务器编号),但 xvfb-run 使直播变得更容易。 我想你已经阅读了这篇文章,但对于未来的用户,我将引用stackgl/headless-gl README:

与 Xvfb 交互需要您在后台启动它并执行节点程序,并将 DISPLAY 环境变量设置为运行 Xvfb 时配置的任何内容(默认值为:99)。 如果你想可靠地做到这一点,你必须在启动时从 init.d 脚本启动 Xvfb,这是额外的配置负担。 幸运的是,Xvfb 附带了一个称为 xvfb-run 的包装脚本,它可以即时启动 Xvfb,执行 Node.js 程序,最后关闭 Xvfb。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM