2016-08-22 28 views
9

XDummy sürücüsünü kullanarak bir docker kabının içinde bir X11 sunucusu çalıştırmaya çalışıyorum. Ancak, çalışmak için sorun yaşıyorum. Amaçlanan amaç başsız render yapmaktır. Xvfb kullanarak çalışmaya başlayabilirim, ancak RANDR desteğine ihtiyacım var ve nihayetinde GL desteğine de ihtiyaç duyacak.Docker kapsayıcısında XDummy

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" ] 

xorg.conf dosyası Ancak xserver değil çizme temel Xdummy xorg.conf

ve günlük dosyası işe yarar bir şeyin sağlamaz, ama ben öyleyim eminim Dockerfile'da Xorg kurarken bir şeyler yanlış yapıyor, ancak benzer bir şey yapmadan hiçbir örnek bulamıyorum.

Bunu yapmak için önerilen prosedür nedir? Herhangi bir çözüm arıyorsa, bunu çözmek için yönetilen

cevap

4
10. xorg düzenli gerekli değildi yüklemek böylece,
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" ] 

sorun

kurarken apt-get liman işçisi kabın içine klavye yapılandırma soran olmasıydı ve kukla paket tüm bağımlılıkları sağladığını.

Son sorun, Xorg ve nodeapp'ı aynı anda başlatamamamdı, ancak bu kolay bir düzeltmekti. Hizmetleri yönetmek için zaten bir düğüm kullanıyorum, bu yüzden Xorg'u başlatan parçayı ona taşıdım.

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); 
4

Ben "Bir şey konteyner başına" Docker felsefesi abone, bu yüzden sadece XDummy yapmaya ben çözümünüzü güncellenmiştir. Başka bir konteynere kolayca bağlanabilir.

 
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"] 

Sonra erişmeye

, /tmp/.X11-unix hacmini bağlamak ve ortamda DISPLAY=:1 ayarlayın.

+1

çözümünüz gayet temizdir. "/tmp/.X11-unix birimi" ile ne demek istediğini anlamak için problemler yaşadım. Burada da ilgilenen herkes için yaptığım şey: '' docker biriminin yaratılması --name x11tmp'' ve '' -v x11tmp:/tmp/.X11-unix'' komutlarını her ikisi de kapsayıcıları oluşturmak için komutları çalıştırır. –

+0

Belirsiz bir şekilde ayrıldım çünkü bağlantı yapmanın farklı bir şekilde yapılıp yapılmadığı, çıplak docker, docker compose veya kubernetes kullanıyor olmanız ve her biriyle yapmanın birkaç yolu vardır. :) Ancak, önerileriniz muhtemelen en yaygın mekanizma için en iyi yoldur, bu yüzden teşekkürler! –