2017-02-11 8 views
7

मैं वर्तमान में डॉकर कंटेनरों में कुछ जीयूआई ऐप्स चलाने की कोशिश कर रहा हूं। मैं jessie frazellegithub पर लोगों की कोशिश कर रहा हूं। हालांकि मैं छवियों (या डॉकर हब से प्राप्त) बना सकता हूं और बिना किसी दृश्य त्रुटियों के उन्हें चला सकता हूं, लेकिन खिड़कियां प्रदर्शित नहीं होती हैं (मैं ऐप नहीं देख सकता)।डॉकर कंटेनर में जीयूआई ऐप का एक्स 11 अग्रेषण

मैं उबंटू 16.04

पर डोकर संस्करण 1.13.1 चला रहा हूँ छवि बनाई से है:

FROM debian:stretch 
MAINTAINER Jessie Frazelle <[email protected]> 

RUN apt-get update && apt-get install -y \ 
    libreoffice \ 
    --no-install-recommends \ 
    && rm -rf /var/lib/apt/lists/* 

ENTRYPOINT [ "libreoffice" ] 

रन कमांड मैं उपयोग कर रहा हूँ नीचे है:

docker run -d \ 
    -v /tmp/.X11-unix:/tmp/.X11-unix \ 
    -v /etc/localtime:/etc/localtime \ 
    -e DISPLAY=unix$DISPLAY 
    -v $HOME/Documents:/root/Documents \ 
    -e GDK_SCALE \ 
    -e GDK_DPI_SCALE \ 
    --name libreoffice \ 
    jess/libreoffice 

खोज के बाद कई स्रोत, मैं देख सकता हूं कि उपर्युक्त काम करना चाहिए, और अधिकांश लोग कह रहे हैं कि रन कमांड में निम्नलिखित पंक्तियां आवश्यक हैं,

-v /tmp/.X11-unix:/tmp/.X11-unix 
    -e DISPLAY=unix$DISPLAY 

लेकिन फिर भी मैं विंडो को प्रदर्शित करने के लिए नहीं प्राप्त कर सकता।

  1. मैं इसे कैसे काम कर सकता हूं?
  2. मैं मूल रूप से क्या खो रहा हूं?

किसी भी मदद की सराहना की जाएगी।

+0

इसमें कुछ अच्छी जानकारी है: http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/। आपको शायद उपयोगकर्ता मानचित्रण के साथ गड़बड़ करने की आवश्यकता होगी। – johnharris85

+0

क्या आपने इसे '-e DISPLAY = $ DISPLAY' के साथ आजमाया था? क्या कंटेनर 'libreoffice' निष्पादित करता है जब से कोई त्रुटि है? –

+0

इसके अलावा, क्या आप उसी होस्ट में कंटेनर चला रहे हैं जहां आपके एक्स डिस्प्ले हैं, या रिमोट होस्ट से? –

उत्तर

1

एक्स सर्वर के साथ संवाद करने में सक्षम होने के लिए, जिस उपयोगकर्ता को आप ऐप चलाते हैं उसे एक्स सर्वर के साथ संवाद करने की अनुमति दी जानी चाहिए। तो मुझे लगता है कि आपके पास दो विकल्प हैं:

1) एक्स सर्वर से कनेक्ट करने के लिए कंटेनर में आपके पास मौजूद उपयोगकर्ता को अनुमति दें। अपने अनुप्रयोग कंटेनर के अंदर उपयोगकर्ता root साथ चलाया जाता है, तो आप उपयोग कर सकते हैं:

$ xhost +SI:localuser:root 

(मैं इस की सुरक्षा के प्रभाव पता नहीं है, लेकिन जड़ किसी भी तरह से कनेक्ट करने के लिए सक्षम होना चाहिए ...)

2) एक उपयोगकर्ता को कंटेनर में जोड़ें जो आपके उपयोगकर्ता सत्र से मेल खाता है। तो

$ useradd -u 1000 my_user 

और कंटेनर के अंदर अपने अनुप्रयोग चलाने के लिए है कि उपयोगकर्ता का उपयोग करें: उपयोगकर्ता आप मेजबान सिस्टम में उपयोग कर रहे हैं यूआईडी = 1000 है, तो आप कंटेनर के अंदर एक डमी उपयोगकर्ता बना सकते हैं। इसे संबद्ध होस्ट में किसी भी बदलाव की आवश्यकता नहीं है (क्योंकि उपयोगकर्ता 1000 पहले ही कनेक्शन में सक्षम है)।

दो विकल्पों को देखते हुए, दूसरा बेहतर लगता है, क्योंकि इसे होस्ट सिस्टम में किसी भी बदलाव की आवश्यकता नहीं है, और यदि आपको अन्य कंटेनर में इस कंटेनर का उपयोग करने की आवश्यकता है कि मुख्य उपयोगकर्ता यूआईडी = 1000 से मेल नहीं खाता है, तो आप कंटेनर को एक env var से सही यूआईडी प्राप्त कर सकते हैं, और उसके बाद सही उपयोगकर्ता (useradd + chown प्रोग्राम फ़ाइलें) सेट कर सकते हैं।

+0

ऐसा मत करें :( – johnharris85

+2

मैंने कोशिश की और यह काम किया, इसलिए कम से कम मुझे पता है कंटेनर सेटअप और सही ढंग से चल रहा है। मैंने पढ़ा है कि यह विधि असुरक्षित है इसलिए लिंक को पढ़ेगा जो @ जॉनहरिस 85 ऊपर पोस्ट किया गया है और अन्य लोग एक और अधिक सुरक्षित तरीके से प्रयास करने और खोजने के लिए। –

+1

@ डेविड ब्रू हां, सबकुछ थोड़ा असुरक्षित है, लेकिन विचार यह जांचना था कि कनेक्शन को अवरुद्ध कर रहा था या नहीं। मैंने अन्य विकल्पों के साथ प्रतिक्रिया संपादित की है। शुभकामनाएं – Salem

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