क्या कोई docker.sock की व्याख्या कर सकता है


130

मैं फ़ाइल docker.sockमें बढ़ते के वास्तविक कारण को समझने की कोशिश कर रहा हूं docker-compose.yml। क्या यह ऑटो-डिस्कवरी के लिए है?

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

जवाबों:


130

docker.sockUNIX सॉकेट है जिसे डॉकर डेमन सुन रहा है। यह डॉकर एपीआई के लिए मुख्य प्रवेश बिंदु है। यह टीसीपी सॉकेट भी हो सकता है लेकिन सुरक्षा कारणों से डिफ़ॉल्ट रूप से डॉकियर यूनिक्स सॉकेट का उपयोग करने के लिए चूक करता है।

Docker cli क्लाइंट इस सॉकेट का उपयोग डिफ़ॉल्ट रूप से docker कमांड को निष्पादित करने के लिए करता है। आप इन सेटिंग्स को भी ओवरराइड कर सकते हैं।

अलग-अलग कारण हो सकते हैं कि आपको कंटेनर के अंदर डोकर सॉकेट को माउंट करने की आवश्यकता क्यों हो सकती है। जैसे दूसरे कंटेनर के भीतर से नए कंटेनर लॉन्च करना। या ऑटो सेवा की खोज और लॉगिंग उद्देश्यों के लिए। यह हमले की सतह को बढ़ाता है इसलिए आपको सावधान रहना चाहिए यदि आप एक कंटेनर के अंदर डॉक सॉकेट को माउंट करते हैं तो उस कंटेनर के अंदर चलने वाले विश्वसनीय कोड हैं अन्यथा आप बस अपने होस्ट को डॉक डेमॉन से समझौता कर सकते हैं, क्योंकि डॉकर डिफ़ॉल्ट रूप से सभी कंटेनरों को रूट के रूप में लॉन्च करता है।

डॉकर सॉकेट में अधिकांश इंस्टॉलेशन में एक डॉकटर समूह होता है, इसलिए उस समूह के भीतर उपयोगकर्ता डॉक सॉकेट के खिलाफ रूट अनुमति के बिना डॉक कमांड चला सकते हैं, लेकिन वास्तविक डॉक कंटेनर को रूट अनुमति प्राप्त होती है क्योंकि डॉक डेमॉन प्रभावी रूप से रूट के रूप में चलता है (इसे रूटस्पेस और सीग्रुप तक पहुंचने के लिए रूट अनुमति की आवश्यकता होती है) ।

मुझे आशा है कि यह आपके प्रश्न का उत्तर देगा।

अधिक जानकारी: https://docs.docker.com/engine/reference/commandline/dockerd/#examples


1
टूटी हुई कड़ी। उम्मीद की जाने वाली समान जानकारी शायद यह है: docs.docker.com/engine/admin
Borja Bolilla

7
चेतावनियों के अलावा @boynux ने आपको प्रदान किया है कि आप लेख डॉकटर सिक्योरिटी बेस्ट-प्रैक्टिस में अधिक जानकारी पा सकते हैं । इस पर वे कहते हैं: " /var/run/docker.sockकंटेनर के अंदर माउंट करना एक आम, फिर भी बहुत खतरनाक अभ्यास है। एक हमलावर किसी भी कमांड को अंजाम दे सकता है जो डॉक सेवा चला सकता है, जो आम तौर पर पूरे होस्ट सिस्टम तक पहुंच प्रदान करता है क्योंकि डॉकर सेवा रूट के रूप में चलती है। "
अर्नोल्ड स्क्रेवर

36

मुझे यह थोड़ी देर से पता है, लेकिन मुझे उम्मीद है कि मेरा जवाब बहुत सारी अंतर्दृष्टि देगा

सबसे पहले मैं यूनिक्स सॉकेट्स के बारे में बात करता हूं

सॉकेट शब्द आमतौर पर आईपी सॉकेट को संदर्भित करता है। ये वे हैं जो एक पोर्ट (और पते) से बंधे हैं, हम टीसीपी अनुरोध भेजते हैं, और उनसे प्रतिक्रियाएं प्राप्त करते हैं।

सॉकेट का एक अन्य प्रकार एक यूनिक्स सॉकेट है, इन सॉकेट्स का उपयोग आईपीसी (इंटरप्रोसेस कम्युनिकेशन) के लिए किया जाता है । उन्हें यूनिक्स डोमेन सॉकेट ( यूडीएस) भी कहा जाता है ) । यूनिक्स सॉकेट संचार के लिए स्थानीय फाइल सिस्टम का उपयोग करते हैं, जबकि आईपी सॉकेट नेटवर्क का उपयोग करते हैं।

डोकर डेमॉन तीन अलग-अलग प्रकार के सॉकेट के माध्यम से डॉकर इंजन एपीआई अनुरोधों के लिए सुन सकता है: unix, tcp, and fd :।

डिफ़ॉल्ट रूप से, एक यूनिक्स डोमेन सॉकेट (या IPC सॉकेट) /var/run/docker.sock पर बनाया जाता है

आइए हम कुछ जीवंत उदाहरण देखें :

Docker Server REST API को सुनने के लिए इस सॉकेट का उपयोग करता है, और क्लाइंट सॉकेट का उपयोग सर्वर से API अनुरोध भेजने के लिए करता है।

कर्ल--unix-socket ध्वज के माध्यम से यूनिक्स सॉकेट से बात कर सकता है । चूंकि Docker Server API को REST के रूप में उजागर किया गया है, इसलिए हमें HTTP पर कमांड भेजने की आवश्यकता होगी। इसके अलावा, जैसा कि यह सर्वर स्थानीय है (याद रखें, फ़ाइल सिस्टम), हम URL में किसी भी होस्टनाम को पास कर सकते हैं (या लोकलहोस्ट से चिपक सकते हैं, यह भी ठीक काम करेगा!)। सर्वर को होस्टनाम की परवाह नहीं है, बस पथ।

curl --unix-socket /var/run/docker.sock http://localhost/images/json | jq

 [
  {
    "Containers": -1,
    "Created": 1525888860,
    "Id": "sha256:24a77bfbb9ee3aeef9e24766ad6e9fa57f85c67596f154e8916e4f314067e149",
    "Labels": null,
    "ParentId": "",
    "RepoDigests": [
      "postgres@sha256:b06cdddba62f1550a1c674270814e72eaa8734d95912019b4ddc288b650ad67d"
    ],
    "RepoTags": null,
    "SharedSize": -1,
    "Size": 39507096,
    "VirtualSize": 39507096
  }
]

कुछ आदेश :

आप docker.sock के साथ बहुत सारा सामान कर सकते हैं

इस सुंदर लेख को देखें


6

यह मूल रूप से कंटेनर के लिए मेजबान docker डेमॉन को उजागर करता है। तो आप अपने कंटेनर से docker api / client को इनवॉइस को होस्ट पर सीधे कॉल करने / शुरू करने / बनाने / बंद करने के लिए आमंत्रित कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.