2016-08-22 18 views
9

मैं XDummy ड्राइवर का उपयोग करके एक डॉकर कंटेनर के अंदर X11 सर्वर चलाने की कोशिश कर रहा हूं। हालांकि, मुझे इसे काम करने में समस्याएं हैं। उद्देश्य का उद्देश्य हेडलेस प्रतिपादन करना है। मैं इसे Xvfb का उपयोग करके काम करने के लिए प्राप्त कर सकता हूं, लेकिन मुझे RANDR समर्थन की आवश्यकता है, और अंततः जीएल समर्थन की भी आवश्यकता होगी।डॉकर कंटेनर में 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 फ़ाइल बुनियादी Xdummy xorg.conf

हालांकि, xserver बूट नहीं करता है, और लॉगफ़ाइल कुछ भी उपयोगी प्रदान नहीं करता है, लेकिन मैं कुछ मैं कर रहा हूँ कर रहा हूँ डॉकरफ़ाइल में ज़ोरग सेट करते समय कुछ गलत करना, लेकिन मुझे कुछ भी ऐसा कुछ उदाहरण नहीं मिल रहा है।

इस काम को करने की अनुशंसित प्रक्रिया क्या है?

उत्तर

4

यह हल करने के लिए प्रबंधित किया गया है, अगर कोई और समाधान ढूंढ रहा है। इसलिए नियमित xorg स्थापित की जरूरत नहीं था

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

समस्या यह है कि apt-get डोकर कंटेनर के अंदर कुँजीपटल कॉन्फ़िग के लिए पूछ रहा था स्थापित करते हुए था, और डमी पैकेज सभी निर्भरता प्रदान की है कि।

अंतिम मुद्दा यह था कि मैं एक ही समय में ज़ोरग और नोडैप शुरू नहीं कर सका, लेकिन यह एक आसान फिक्स था। मैं पहले से ही सेवाओं का प्रबंधन करने के लिए नोड का उपयोग करता हूं, इसलिए मैंने उस हिस्से को ज़ोरग से शुरू कर दिया।

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

मैं डॉकर दर्शन "एक चीज़ प्रति कंटेनर" की सदस्यता लेता हूं, इसलिए मैंने आपके समाधान को केवल 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 निर्धारित किया है।

+1

आपका समाधान काफी साफ है। मुझे "/tmp/.X11-unix वॉल्यूम लिंक" से क्या समझने में समस्याएं समझने में समस्याएं आईं। किसी भी व्यक्ति के लिए जो यहां रूचि रखता है वह है जो मैंने किया था: 'डॉकर वॉल्यूम - name x11tmp'' बनाएं और कंटेनर बनाने के लिए दोनों रन कमांडों में' '-v x11tmp:/tmp/.X11-unix'' जोड़ें। –

+0

मैंने इसे अस्पष्टता से छोड़ा क्योंकि लिंकिंग अलग-अलग होती है चाहे आप नंगे डॉकर, डॉकर कंपोज़ या कुबर्नेट्स का उपयोग कर रहे हों, और प्रत्येक के साथ ऐसा करने के कई तरीके हैं। :) हालांकि, आपका सुझाव शायद सबसे आम तंत्र के लिए सबसे अच्छा तरीका है, इसलिए धन्यवाद! –

संबंधित मुद्दे