Docker for Mac वॉल्यूम माउंट बेस डॉकर सिस्टम से भिन्न व्यवहार करते हैं। यह ज्यादातर इसलिए है क्योंकि डॉकर ऐप्पल के फाइल सिस्टम सैंडबॉक्स दिशानिर्देशों का अनुपालन करने की कोशिश करता है।
जैसा कि डॉकर की प्राथमिकताओं में दिखाया गया है, केवल कुछ पथ मैकोज़ द्वारा निर्यात किए जाते हैं।
/Users
/Volumes
/tmp
/private
/var
MacOS में एक प्रतीकात्मक कड़ी /private
में है। यही कारण है कि /tmp
के लिए भी सच है:
$ ls -ld /tmp /var
[email protected] 1 root wheel 11 Jan 26 16:18 /tmp -> private/tmp
[email protected] 1 root wheel 11 Jan 26 16:18 /var -> private/var
/tmp
बंटवारे पैनल की सूची में क्यों है, लेकिन /var
नहीं है (भले ही दोनों /private
का एक हिस्सा हैं)? मैक के documentation about filesystem namespaces के लिए डोकर बताते हैं:
By default, you can share files in /Users/
, /Volumes/
, /private/
, and /tmp
directly. To add or remove directory trees that are exported to Docker, use the File sharing tab in Docker preferences whale menu -> Preferences -> File sharing. (See Preferences.)
All other paths used in -v
bind mounts are sourced from the Moby Linux VM running the Docker containers, so arguments such as -v /var/run/docker.sock:/var/run/docker.sock
should work as expected. If a macOS path is not shared and does not exist in the VM, an attempt to bind mount it will fail rather than create it in the VM. Paths that already exist in the VM and contain files are reserved by Docker and cannot be exported from macOS.
ध्यान दें कि /var/run
विशेष रूप से एक जगह है कि बजाय MacOS से की लिनक्स वीएम से घुड़सवार किया जाएगा, के रूप में यहाँ उल्लेख किया है।
जब आप वॉल्यूम माउंट के लिए पूछते हैं, तो मैकोज़ फाइल सिस्टम निर्यात पहले चेक किया जाता है। यदि वहां कोई मिलान नहीं है, तो लिनक्स वीएम जहां डॉकर चल रहा है, उसकी जांच की जाती है। यदि उनमें से कोई भी आपके द्वारा अनुरोधित पथ नहीं है, तो माउंट विफल हो जाता है।
आपके मामले में, /var
मैकोज़ द्वारा निर्यात नहीं किया जाता है। /var
लिनक्स वीएम में मौजूद है, लेकिन /var/folders
नहीं है। इसलिए, पथ उपलब्ध नहीं है, और माउंट विफल रहता है।
यदि आप /private/var
पर पथ बदलते हैं, तो यह सफल होगा, क्योंकि मैकोज़ बढ़ने के लिए पूरे /private
फाइल सिस्टम पेड़ निर्यात करता है।
चीजों को और अधिक पोर्टेबल बनाने के लिए, आप परीक्षण कर सकते हैं कि आप वर्तमान में किस प्लेटफ़ॉर्म पर चल रहे हैं, और यदि यह मैकोज़ है, तो /private
के साथ माउंट पथ को उपसर्ग करें।
क्या आपने '-v/private/var/फ़ोल्डर्स/zz/... 'कोशिश की? –
@DanLowe: मैंने नहीं किया था, क्योंकि कोड 'WORKING_DIR = "$ (mktemp -d)' और' -v $ {WORKING_DIR} 'जैसा था। लेकिन' WORKING_DIR = "/ private" $ (mktemp - डी) ', इस मुद्दे को हल करने के लिए प्रतीत होता है। बहुत बहुत धन्यवाद :) – Aayush
मैं कुछ जवाब दूंगा जब यह कुछ मिनट मिलता है तो यह एक उत्तर पोस्ट करेगा –