Docker容器中的XDummy

use*_*305 12 headless xserver xorg docker

我试图通过使用XDummy驱动程序在docker容器内运行X11服务器.但是,我在使用它时遇到了问题.预期目的是执行无头渲染.我可以使用Xvfb来使用它,但我需要RANDR支持,并且最终还需要GL支持.

Dockerfile:

FROM node:slim

RUN mkdir nodeapp \
    && apt-get update \
    && apt-get install -y xorg \
    && apt-get install -y xserver-xorg-video-dummy x11-apps

COPY App /nodeapp/

ENV DISPLAY :1

RUN cd nodeapp/ \
    && npm install \
    && Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile /nodeapp/xdummy.log -config /nodeapp/xorg.conf start :1 &

ENTRYPOINT [ "node", "/nodeapp/index.js" ]
Run Code Online (Sandbox Code Playgroud)

xorg.conf文件是基本的Xdummy xorg.conf

但是,xserver没有启动,并且日志文件没有提供任何有用的东西,但我确信在Dockerfile中设置Xorg时我做错了什么,但我找不到任何类似的例子.

建议的程序是什么?

Bry*_*sen 8

我订阅了"每个容器一件事"的Docker理念,所以我修改了你的解决方案只做了XDummy.它可以很容易地链接到另一个容器.

FROM debian:jessie

ENV DEBIAN_FRONTEND noninteractive
ENV DISPLAY :1

RUN apt-get update \
    && apt-get -y install xserver-xorg-video-dummy x11-apps

VOLUME /tmp/.X11-unix

COPY xorg.conf /etc/X11/xorg.conf

CMD ["/usr/bin/Xorg", "-noreset", "+extension", "GLX", "+extension", "RANDR", "+extension", "RENDER", "-logfile", "./xdummy.log", "-config", "/etc/X11/xorg.conf", ":1"]

然后访问,链接/tmp/.X11-unix卷并DISPLAY=:1在您的环境中设置.

  • 您的解决方案非常简洁。我遇到了一些问题,无法理解“链接/tmp/.X11-unix卷”的含义。对于任何对此感兴趣的人,我都做了:``docker volume create --name x11tmp``并在两个运行命令中添加-v x11tmp:/tmp/.X11-unix以创建容器。 (2认同)

use*_*305 6

管理解决这个问题,如果其他人正在寻找解决方案.

FROM node:slim

ENV DEBIAN_FRONTEND noninteractive
ENV DISPLAY :1

RUN mkdir nodeapp \
    && apt-get update \
    && apt-get -y install xserver-xorg-video-dummy x11-apps

COPY App /nodeapp/

RUN cd nodeapp/ \
    && npm install

ENTRYPOINT [ "node", "/nodeapp/index.js" ]
Run Code Online (Sandbox Code Playgroud)

问题是apt-get在安装时要求docker容器内的键盘配置,并且虚拟包提供了所有依赖项,因此不需要常规的xorg安装.

最后一个问题是我无法同时启动Xorg和nodeapp,但这很容易解决.我已经使用node来管理服务,所以我把开始Xorg的部分移到了那里.

var args = ["-noreset", "+extension", "GLX", "+extension", "RANDR", "+extension", "RENDER", "-logfile", "./xdummy.log", "-config", "/mplex-core/xorg.conf", ":1"];
this.proc = child_process.spawn("Xorg", args);
Run Code Online (Sandbox Code Playgroud)