2016-08-22 10 views
9

Próbuję uruchomić serwer X11 wewnątrz kontenera dokera za pomocą sterownika XDummy. Jednak mam problemy z uruchomieniem go. Celem jest wykonanie renderowania bezgłowego. Mogę go uruchomić za pomocą Xvfb, ale potrzebuję wsparcia RANDR i ostatecznie będę potrzebował również obsługi GL.XDummy w pojemniku Docker

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

plik xorg.conf jest podstawowym Xdummy xorg.conf

Jednak xserver nie uruchamia się, a logfile nie przewiduje niczego przydatne, ale jestem pewien, jestem robi coś nie tak podczas konfigurowania Xorg w pliku Dockerfile, ale nie mogę znaleźć żadnych przykładów podobnych działań.

Jaka jest zalecana procedura, aby to zadziałało?

Odpowiedz

4

Udało się rozwiązać ten problem, jeśli ktoś szuka rozwiązania.

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

Problem polegał na tym, że apt-get prosił o klawiatury config wewnątrz pojemnika Döcker podczas instalacji, i że pakiet atrapa warunkiem wszystkie zależności, więc regularne xorg instalacja nie była potrzebna.

Ostatnim problemem było to, że nie mogłem uruchomić Xorg i nodeapp jednocześnie, ale to była łatwa łatwa. Już używam węzła do zarządzania usługami, więc przeniosłem część z Xorg do tego.

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

Zasubskrybowałem filozofię dokowania "jedna rzecz na pojemnik", więc zmodyfikowałem twoje rozwiązanie tak, aby działało tylko na XDummy. Można go łatwo połączyć z innym kontenerem.

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

A następnie uzyskać dostęp, połączyć i ustawić głośność /tmp/.X11-unixDISPLAY=:1 w danym środowisku.

+1

Twoje rozwiązanie jest całkiem miłe. Miałem problemy z rozumieniem, co masz na myśli mówiąc "połącz wolumin /tmp/.X11-unix". Dla każdego, kto jest tutaj zainteresowany, jest to, co zrobiłem: '' docker volume create --name x11tmp'' i dodaj '' -v x11tmp:/tmp/.X11-unix'', aby uruchamiać polecenia do tworzenia kontenerów. –

+0

Zostawiłem to trochę niejasne, ponieważ tworzenie linków odbywa się inaczej, niezależnie od tego, czy używasz nieosłoniętego okna dokowanego, komponuje się dokowanie, czy też kernernetes, i istnieje kilka sposobów robienia tego za każdym razem. :) Jednak Twoja sugestia jest prawdopodobnie najlepszym sposobem na najczęstszy mechanizm, więc dziękuję! –

Powiązane problemy