2014-04-12 9 views
8

यह काम करता है:डोकर चलाने मैं आयकर छवि/bin/bash - स्रोत पहले फ़ाइलें

# echo 1 and exit: 
$ docker run -i -t image /bin/bash -c "echo 1" 
1 
# exit 

# echo 1 and return shell in docker container: 
$ docker run -i -t image /bin/bash -c "echo 1; /bin/bash" 
1 
[email protected]:/# 

प्रश्न: कैसे कर सकता है मैं source खोल में एक फ़ाइल? (यह काम नहीं करता है)

$ docker run -i -t image /bin/bash -c "source <(curl -Ls git.io/apeepg) && /bin/bash" 
# content from http://git.io/apeepg is sourced and shell is returned 
[email protected]:/# 

उत्तर

-2

मुझे नहीं लगता कि आप इसे कम से कम नहीं कर सकते हैं।

FROM image 
ADD my-file /my-file 
RUN ["source", "/my-file", "&&", "/bin/bash"] 
+0

'स्रोत' एक अंतर्निहित है। यह 'कमांड' के रूप में मौजूद नहीं है, इसलिए यह केवल एक त्रुटि देता है। – Gerrat

4

मेरे मामले में, मैं एक Dockerfile में RUN source आदेश (जो का उपयोग कर/bin/bash चलेंगे) का उपयोग करने के: क्या तुम कर सकते हो अपनी छवि को संशोधित करने, और फ़ाइल आप स्रोत करना चाहते हैं जोड़ने के लिए, तो तरह है node.js

के लिए nvm स्थापित करें यहां एक उदाहरण है।

FROM ubuntu:14.04 

RUN rm /bin/sh && ln -s /bin/bash /bin/sh 
... 
... 
RUN source ~/.nvm/nvm.sh && nvm install 0.11.14 
+0

यह केवल 'डॉकर बिल्ड' के दौरान काम करता है और केवल उसी 'रन' निर्देश के लिए काम करता है। जब परिणामस्वरूप छवि को बाद में एक अलग या इंटरैक्टिव कंटेनर के रूप में शुरू किया जाता है तो फ़ाइल को सोर्स नहीं किया जाएगा। –

1

मैं ऐसी ही कुछ करना चाहता था, और अपने विचार पर थोड़ा विस्तार के साथ आया था निम्नलिखित:

docker run -ti --rm ubuntu \ 
    bash -c 'exec /bin/bash --rcfile /dev/fd/1001 \ 
          1002<&0 \ 
          <<<$(echo PS1=it_worked:) \ 
          1001<&0 \ 
          0<&1002' 
  • --rcfile /dev/fd/1001 .bashrc के बजाय उस फ़ाइल वर्णनकर्ता की सामग्री का उपयोग करेगा
  • 1002<&0 stdin
  • <<<$(echo PS1=it_worked:)PS1=it_worked: stdin
  • पर रखता है

    RUN curl -O git.io/apeepg.sh && \ 
        echo 'source apeepg.sh' >> ~/.bashrc 
    

    तो बस चलाने: 691,363,210

  • 1001<&0 चाल 1001 fd को यह stdin है, जो हम rcfile
  • 0<&1002 के रूप में उपयोग stdin है कि हम शुरू में बचाया
0

आप इंटरैक्टिव कंटेनरों में .bashrc उपयोग कर सकते हैं पुनर्स्थापित करता है सामान्य रूप से docker run -it --rm some/image bash के साथ।

ध्यान दें कि यह केवल इंटरैक्टिव कंटेनर के साथ काम करेगा।

संबंधित मुद्दे