मैं डॉक रन के साथ एक निर्देशिका के लिए सीडी क्यों नहीं कर सकता?


39

मुझे एक विशिष्ट निर्देशिका से एक एप्लिकेशन चलाने की आवश्यकता है।

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

वह निर्देशिका निश्चित रूप से मौजूद है, और अगर मैं अंतःक्रियात्मक रूप से बैश चलाकर docker से जुड़ता हूं तो मैं उपरोक्त कमांड चला सकता हूं।

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014

मैं पूर्ण पथ निर्दिष्ट करके अपना कार्यक्रम चला सकता हूं, लेकिन फिर यह क्रैश हो जाता है क्योंकि यह वर्तमान निर्देशिका से लॉन्च होने की उम्मीद करता है। मैं क्या कर सकता हूँ?

जवाबों:


34

अपने आदेश को इस तरह / बिन / श के तर्क के रूप में पास करें:

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

डॉक रन सेंटो / बिन / श-सी 'सीडी / बिन; / बिन / ls 'कुछ नहीं छापता है, जबकि docker रन सेंटो / बिन / sh -c' / bin / ls / bin 'कार्य करता है।
seanmcl

वास्तव में दोनों कमांड फाइलों की सूची को / बिन डायरेक्टरी में आउटपुट करते हैं। दोनों की कोशिश की।
Glueon

मेरे बॉक्स पर नहीं, सेंटो 7।
शेंमक्ल

1
वास्तव में, यहां तक ​​कि ठीक काम करने के लिए मेरे आदेश के आसपास के उद्धरणों को हटा देना। मुझे लगता है कि डॉकटर इसे /bin/sh -cवैसे भी लपेटता है ।
schmmd

85

आप -wअपनी कार्यशील निर्देशिका को बदलने के लिए विकल्प का उपयोग कर सकते हैं ।

docker run

  -w, --workdir=""           Working directory inside the container

तो, आपके मामले में, आप दौड़ेंगे:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

मैं इस्तेमाल कर सकते हैं -wके साथ docker exec? मैं अपने कंटेनर में पाइथन स्क्रिप्ट को चलाने का तरीका ढूंढ रहा हूं, लेकिन कंटेनर के बाहर इसे रोक नहीं सकता।
zx1986

ओह, मुझे जवाब मिला ....flag provided but not defined: -w
zx1986

1
Dammit क्यों यह docker रन संदर्भ पृष्ठ के निचले भाग में सभी तरह से छिपा हुआ है ! :-)
अमीर अबिरी

5
यह स्वीकार किया जाना चाहिए जवाब
fferri

4

वर्किंग डायरेक्टरी को सेट करने के लिए अपने Dockerfile में WORKDIR का उपयोग करें। तब आप EXEC के साथ अपनी कमांड चला सकते हैं।


0

यह मुझे अनुमति के कारण हो सकता है या उदाहरण निष्पादन योग्य उपलब्ध मार्ग को खोजने में सक्षम नहीं है। यह जाँचने के लिए कि रास्ते में निष्पादन योग्य उपलब्ध स्थान को जोड़ने का प्रयास करें और स्क्रिप्ट चलाने का प्रयास करें

पथ में वर्तमान निर्देशिका जोड़ने के लिए कृपया नीचे दिए गए आदेश का उपयोग करें

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