2015-11-19 7 views
6

मैं (डोकर छवि से कुछ वैज्ञानिक सॉफ्टवेयर लपेटकर Mac OS X पर boot2docker और वह सॉफ्टवेयर (https://github.com/voutcn/megahit.git) के प्रयोग पर नामित पाइप उपयोग कर रहा है काम कर रहा हूँ अजगर में के माध्यम से मैक ओएस एक्स फाइल सिस्टम के लिए घुड़सवार कोड, लेकिन यह महत्वपूर्ण नहीं है) एक दूसरे को अलग-अलग हिस्सों (सी में लिखे गए) तारों के लिए। मैं मेजबान मैक ओएस एक्स मशीन से अस्थायी फ़ोल्डर माउंट डोकर कंटेनर में खरोंच क्षेत्र प्रदान करने के लिए (क्योंकि सॉफ्टवेयर के अस्थायी उत्पादन विशाल हो सकता है) कुछ इस तरह के साथ:नाम पाइप boot2docker

docker run -v /external/folder:/tmp/scratch <image> <args> 

यह मेरे कंटेनर के अंदर इस पर्वत लाइन देता है:

none on /tmp/scratch type vboxsf (rw,nodev,relatime) 

और पाइप निर्माण नामक इस घुड़सवार फ़ोल्डर के अंदर कंटेनर के अंदर चलने पर विफल रहता है। यह अजगर, सी या किसी विशेष भाषा से भी संबंधित नहीं है। मैं एक त्रुटि के साथ इस फोल्डर में linux कमांड mkfifo pipe1 साथ की जाँच की डबल:

mkfifo: cannot create fifo 'pipe1': Operation not permitted 

यह अच्छी तरह से किसी भी आंतरिक नहीं घुड़सवार फ़ोल्डर के लिए कंटेनर के अंदर हालांकि काम करता है। ऐसा क्यों होता है और इसे कैसे ठीक किया जा सकता है?

पीएस: समस्या है कि मैं आसानी से समस्या को पुन: उत्पन्न करने के लिए करता हूं।

1) मैक ओएस एक्स boot2docker साथ

2) Dockerfile है:

FROM ubuntu:14.04 
#WORKDIR /tmp <- this one would work 
WORKDIR /tmp/scratch 
ENTRYPOINT [ "mkfifo" ] 
CMD [ "pipe1" ] 

3) छवि निर्माण:

docker build --rm -t mine/namedpipes:latest . 

4) चल रहा है (बाहरी मेजबान फ़ोल्डर में किया जा रहा है होना करने के लिए घुड़सवार):

docker run -v $(pwd):/tmp/scratch mine/namedpipes:latest 

उत्तर

1

अपग्रेड करें मैक के लिए डॉकर का एक हालिया संस्करण, और आपकी समस्या का हल हो जाएगा: https://docs.docker.com/docker-for-mac/release-notes/#beta-2-release-2016-03-08-1102-beta2

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

विशेष फ़ाइलों के लिए वर्तमान समर्थन https://docs.docker.com/docker-for-mac/osxfs/#file-types

पार हाइपरविजर समर्थन के लिए इस मुद्दे को https://github.com/docker/for-mac/issues/483

पर स्थित है में विस्तृत है