5

मैं डॉकर का उपयोग करके एक ईएलके स्टैक चलाने का प्रयास कर रहा हूं। मुझे docker-elk मिला जो docker-compose का उपयोग कर मेरे लिए पहले ही कॉन्फ़िगरेशन स्थापित कर चुका है।कंटेनर-लेखन योग्य होस्ट निर्देशिका कैसे माउंट करें?

मैं एक कंटेनर के बजाय मेजबान मशीन पर लोचदार खोज डेटा स्टोर करना चाहता हूं। प्रति डोकर-एल्क के README रूप में, मैं docker-compose.yml के volumes लाइन elasticsearch करने के खंड कहा:

elasticsearch: 
    image: elasticsearch:latest 
    command: elasticsearch -Des.network.host=0.0.0.0 
    ports: 
    - "9200" 
    - "9300" 
    volumes: 
    - ../../env/elasticsearch:/usr/share/elasticsearch/data 

हालांकि, जब मैं docker-compose up चलाने मैं:

$ docker-compose up 
Starting dev_elasticsearch_1 
Starting dev_logstash_1 
Starting dev_kibana_1 
Attaching to dev_elasticsearch_1, dev_logstash_1, dev_kibana_1 
kibana_1  | Stalling for Elasticsearch 
elasticsearch_1 | [2016-03-09 00:23:35,193][WARN ][bootstrap    ] unable to install syscall filter: seccomp unavailable: your kernel is buggy and you should upgrade 
elasticsearch_1 | Exception in thread "main" java.lang.IllegalStateException: Unable to access 'path.data' (/usr/share/elasticsearch/data/elasticsearch) 
elasticsearch_1 | Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/elasticsearch 
elasticsearch_1 | at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) 
elasticsearch_1 | at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) 
elasticsearch_1 | at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) 
... etc ... 

../../env में देख रहे हैं, elasticsearch निर्देशिका वास्तव में बनाया गया था, लेकिन यह खाली था। अगर मैं ../../env/elasticsearch/elasticsearch बनाता हूं तो मुझे /usr/share/elasticsearch/data/elasticsearch/nodes के लिए एक्सेस त्रुटि मिलती है। अगर मैं /nodes बनाता हूं तो मुझे /nodes/0, आदि के लिए त्रुटि मिलती है ...

संक्षेप में, ऐसा लगता है कि कंटेनर में निर्देशिका पर लेखन अनुमति नहीं है।

मैं इसे अनुमति अनुमतियाँ कैसे प्राप्त करूं? मैंने chmod a+wx ../../env/elasticsearch को आजमाया, और फिर यह अगली निर्देशिका बनाने का प्रबंधन करता है, लेकिन उस निर्देशिका में drwxr-xr-x की अनुमति है और यह फिर से अटक जाता है।

मुझे इसे रूट के रूप में चलाने का विचार पसंद नहीं है।

+0

'डोकर-लिखें रन --rm elasticsearch स्टेट -c"% यू% जी "/ usr/share/elasticsearch/आंकड़ों का उत्पादन क्या है '? – kojiro

+0

@kojiro: मुझे 'अज्ञात कर्मचारी' – Claudiu

उत्तर

2

डॉकर इन चीजों के बारे में चिंता करने की अपनी मूल छवियों में चिंता नहीं करता है क्योंकि यह आपको वॉल्यूम्स या वॉल्यूम कंटेनर का उपयोग करने की अपेक्षा करता है। मेजबान की ओर बढ़ने से दूसरे वर्ग का समर्थन मिलता है। लेकिन जब तक यूआईडी निर्देशिका का मालिक है, वह शून्य नहीं है (और ऐसा लगता है कि यह हमारे टिप्पणी विनिमय पर आधारित नहीं है) तो आप उस उपयोगकर्ता के रूप में चल रहे elasticsearch के साथ भागने में सक्षम होना चाहिए जो पहले से ही निर्देशिका का मालिक है। आप कंटेनर से elasticsearch उपयोगकर्ता को हटाने और पुनः जोड़ने का प्रयास कर सकते हैं, इसकी यूआईडी निर्दिष्ट कर सकते हैं।

आपको इसे एंट्रीपॉइंट समय पर करना होगा, इसलिए आपकी सर्वश्रेष्ठ शर्त कस्टम कंटेनर बनाना होगा। एक फ़ाइल इन सामग्री के साथ my-entrypoint बुलाया बनाएँ:

#!/bin/bash 

# Allow running arbitrary one-off commands 
[[ $1 && $1 != elasticsearch ]] && exec "[email protected]" 
# Otherwise, fix perms and then delegate the rest to vanilla 
target_uid=$(stat -c %u /usr/share/elasticsearch/data) 
userdel elasticsearch 
useradd -u "$target_uid" elasticsearch 
. /docker-entrypoint "[email protected]" 

यकीन है कि यह निष्पादन योग्य न हो। फिर इन सामग्री के साथ एक Dockerfile बनाएँ:

FROM elasticsearch 
COPY my-entrypoint/
ENTRYPOINT ["/my-entrypoint"] 

और अंत में अपने डोकर-compose.yml फ़ाइल का अद्यतन: जब आप docker-compose up चलाने यह आपके परिवर्तनों के साथ एक elasticsearch कंटेनर बनाने चाहिए

elasticsearch: 
    build: . 
    command: elasticsearch -Des.network.host=0.0.0.0 
    ports: 
    - "9200" 
    - "9300" 
    volumes: 
    - ../../env/elasticsearch:/usr/share/elasticsearch/data 

अब।

(मैं कुछ इस तरह करना था एक बार with apache for Magento।)

+0

अहह दिलचस्प लगता है! मैंने कोशिश की कि आपने यहां क्या लिखा है लेकिन यह काम खत्म नहीं हुआ ... पहले मैंने सोचा कि यह '/ डॉकर-एंट्रीपॉइंट.श' था, न कि '/ डॉकर-एंट्रीपॉइंट', लेकिन फिर भी यह काम नहीं कर पाया। मैंने आपके जीवन को आसान बनाने के लिए, और इसके बजाय नामित वॉल्यूम का उपयोग करने के लिए, अपने पहले दो वाक्यों के आधार पर निर्णय लिया। – Claudiu

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