डॉकर झुंड मोड सेवा आमंत्रण पर लिनक्स क्षमताओं को कैसे सेट करें

मैं देख रहा हूँ में धारणा की तिजोरी के तहत चल रहे झुंड (1.12.x).

एक एकल कंटेनर के साथ शुरू किया जाएगा:docker run -d --cap-add IPC_LOCK -p 8200:8200 -p 8215:8125 --name vault --volume /vagrant/vault:/vagrant/vault vault server -config=/path/to/vault.hcl

लेकिन जब मैं इसे झुंड में एक सेवा के रूप में चलाना चाहता हूं, तो निर्दिष्ट करने का कोई तरीका नहीं प्रतीत होता है IPC_LOCK क्षमता, इस मामले में तिजोरी सेवा के लिए एन्क्रिप्टेड स्वैपिंग को लॉक करने के लिए ।

के साथ एक झुंड मोड सेवा शुरू करते समय मैं-कैप-झंडे कैसे सेट कर सकता हूं docker service create कमान?

20.10 तक, यह उपलब्ध है docker service create साथ में --cap-add:

$ docker service create --help...      --cap-add list                       Add Linux capabilities      --cap-drop list                      Drop Linux capabilities

या के साथ इस्तेमाल एक रचना फ़ाइल में docker stack deploy संस्करण 2 फ़ाइल से एक ही वाक्यविन्यास के साथ:

version: "3.9"services:  app:    image: your-image:tag    cap_add:    - CAP_NAME1    - CAP_NAME2    cap_drop:    - CAP_NAME3    - CAP_NAME4

[20.10 से पहले का मूल उत्तर ]

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

इस पर चर्चा जीथब पर खत्म हो गई है:

https://github.com/docker/docker/pull/26849#issuecomment-252704844

https://github.com/docker/swarmkit/issues/1030

https://github.com/docker/swarmkit/pull/1722

https://github.com/moby/moby/issues/25885#issuecomment-557790402 और https://github.com/docker/cli/pull/2199

यहां अन्य सभी उत्तर पुराने हैं । डॉकर 20.10.0 और नया अब झुंड सेवाओं के लिए क्षमताओं को निर्दिष्ट करने का समर्थन करता है docker service कमांड लाइन और यह डोकर ढेर YAML फ़ाइल स्वरूप.

कमांड लाइन पर, आप बस निर्दिष्ट करें --cap-add [capability] या --cap-drop [capability].

और यहां एक डॉकर स्टैक वाईएएमएल फ़ाइल में क्षमता जोड़ने के लिए एक उदाहरण है:

version: "3.9"services:  your-service:    cap_add:      - CAP_SYS_ADMIN

देखें https://hub.docker.com/r/ixdotai/swarm-launcher

वह रेपो इस टिप्पणी/विचार पर आधारित है: https://github.com/moby/moby/issues/25885#issuecomment-573355530

उपयोग के मामले के आधार पर, एक समाधान बाइंड-माउंट करना है /var/run/docker.sock झुंड मेजबान(ओं) से सेवा तक, फिर चलाएं docker run --privileged ... या docker run --cap-add ... अपने वास्तविक विशेषाधिकार प्राप्त आदेशों को निष्पादित करने के लिए सेवा से । (आपको सेवा के लिए छवि में डॉकर सीएलआई स्थापित करना होगा । ) इस तरह से चलने वाले अंतरतम कंटेनर में सेवा के बजाय झुंड मेजबान की विशेषाधिकार/क्षमताएं होंगी, और सेवा सिर्फ एक पतली कंटेनर परत बन जाती है ।