डॉक कंटेनर में एक प्रतीकात्मक लिंक के साथ माउंट होस्ट निर्देशिका


104

मैंने इस पैरामीटर के साथ कंटेनर को माउंट किया:

-v / होम / टेस्ट /: / होम / टेस्ट

होस्ट में अंदर / घर / परीक्षण / एक / mnt / फ़ोल्डर की ओर इशारा करते हुए एक प्रतीकात्मक लिंक है।

लेकिन यह लिंक, हालांकि देखा जा सकता है कि कहां इशारा कर रहा है, कंटेनर के अंदर टूटा हुआ लगता है:

root@f93f72b45013:/var/www/html# cd /home/test/ 
root@f93f72b45013:/home/test# ls -lrt 
total 11956 
lrwxrwxrwx. 1 root root 40 Jul 20 15:55 file -> /mnt/mountedfile/
root@f93f72b45013:/home/test# ls -lrt file/*
ls: cannot access file/*: No such file or directory

क्या ऐसा करना संभव है? मुझे यकीन नहीं है कि अगर ऐसा करने का कोई तरीका है।

मुझे पता है कि मैं बस सीधे माउंट कर सकता हूं जहां प्रतीकात्मक लिंक इशारा कर रहा है लेकिन मैं बस सोच रहा था कि क्या यह है।


मैंने एक /mntएंडपॉइंट की मैपिंग के मुद्दों के बारे में सुना है , जो मेजबान-विशिष्ट हो सकता है - यदि आप कर सकते हैं तो सबसे सुरक्षित चीज इससे बचना होगा।
ldg

जवाबों:


144

डॉकटर के अंदर साइमलिंक एक बड़ी चुनौती है। अपने मामले में आप दोनों निर्देशिकाओं को पार कर सकते हैं:

-v /home/test/:/home/test -v /mnt/mountedfile:/mnt/mountedfile

कंटेनर के अंदर और बाहर दोनों काम करने के लिए प्रतीकात्मक लिंक के लिए, उन्हें पूर्ण पथ होना चाहिए और बिल्कुल समान नामों का उपयोग करना होगा।

सामान्य तौर पर, सहकर्मी डॉकटर के अंदर काम नहीं करते हैं। मुझे यह कठिन तरीका लगा।


अगर मेरे पास विंडोज़ में प्रतीकात्मक लिंक है तो क्या करें। पथ c: \ (ड्राइव अक्षर, अर्धविराम और बैकस्लैश के साथ) हो सकता है?
इतन

1
@Eitan छोड़ दो खिड़कियां और गले लिनक्स / यूनिक्स प्रणालियों जब आप डोकर के साथ काम करना चाहते हैं
वियतनाम जी VU

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

लारवेल स्टोरेज सिमलिंक को काम करवाने की कोशिश के साथ पूरे दिन संघर्ष किया। docker-composeविन्यास के लिए इस तरह होगा। volumes: [./:/var/www, ./public/storage:/var/www/public/storage]। यहाँ, के public/storageलिए एक सहानुभूति है ./storage/app/public। समाधान के लिए धन्यवाद!
Jan Iwanow

19

एक उपाय यह है कि डॉकर को मूल फ़ाइल को माउंट किया जाए, लेकिन readlink -fजो फ़ाइल के वास्तविक स्थान को प्रिंट करता है उसका उपयोग करें । इस तरह, आप अभी भी अपने कमांड में सिम्लिंक स्थान को संदर्भित कर सकते हैं, जैसे

docker run -it -v $(readlink -f /home/test/):/home/test/ ...


काम नहीं कर रहा है - इसका परिणाम समान लापता
सिमिलिंक में है

MacOS पर: perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"( stackoverflow.com/questions/7665/… से )
akauppi

7
मैं डोकर में यह परीक्षण नहीं किया है, लेकिन readlink आज़माकर, ऐसा लगता है कि इस बात का / घर / परीक्षण काम करेंगे / है एक सिमलिंक, लेकिन नहीं करता है, तो / घर / परीक्षण / शामिल एक सिमलिंक।
जस्टिन डोनली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.