डॉकर अल्पाइन कंटेनर में एक शेल शुरू करना


165

उबंटू छवि के लिए एक इंटरैक्टिव शेल शुरू करने के लिए हम चल सकते हैं:

ole@T:~$ docker run -it --rm ubuntu
root@1a6721e1fb64:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

लेकिन जब यह अल्पाइन डॉकर छवि के लिए चलाया जाता है , तो निम्न परिणाम हैं:

ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified

अल्पाइन बेस कंटेनर में इंटरेक्टिव शेल शुरू करने के लिए कमांड क्या है?

जवाबों:


282
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / # 

ऊपर इस्तेमाल विकल्प:

  • /bin/ashबिजीबॉक्स द्वारा प्रदान की गई ऐश ( सर्वशक्तिमान शैल ) है
  • --rmबाहर निकलने पर स्वचालित रूप से कंटेनर को हटा दें ( docker run --help)
  • -i इंटरएक्टिव मोड (संलग्न न रहने पर भी खुला रखें)
  • -t एक छद्म-TTY आवंटित करें

1
ज़रूर - अच्छा विचार है - राख शेल है और रन पूरा होने के बाद --rm कंटेनर को हटा देता है। इसलिए यदि आप चाहते हैं कि कंटेनर रन के बाद भी उपलब्ध रहे तो --rm का उपयोग छोड़ दें। मैं इसका इस्तेमाल कर रहा हूं क्योंकि मैं केवल एटीएम का प्रयोग कर रहा हूं।
ओले

फिर इसे ubuntu जैसी डिटैच प्रॉपर्टी से कैसे चलाया जाए?
बेन्यामिन लिमंटो

मेरा मानना ​​है कि दोनों मामलों में ... उबंटू या अल्पाइन ... आप इसे एक -dविकल्प देते हैं।
ओले

2
+1 यह ध्यान देने के लिए कि अल्पाइन के पास है ashऔर नहीं bash, जो अल्पाइन से बहुत परिचित नहीं है, वही है जो मुझे मिला और मुझे पहले कंटेनर तक पहुँचने से रोका।
code_dredd

यदि आप आरएचईएल पर हैं और अनुमति प्राप्त त्रुटि से इनकार करते हैं, तो यह फिर से SELinux है ... होगा कि सेटेनफोर्स 0 अस्थायी रूप से करें: P
पार्थ पटेल

67

आमतौर पर, एक अल्पाइन लिनक्स का चित्र शामिल नहीं bash, इसके बजाय आप उपयोग कर सकते हैं /bin/ash, /bin/sh, ashया केवल sh

/ Bin / राख

docker run -it --rm alpine /bin/ash

/ Bin / श

docker run -it --rm alpine /bin/sh

एश

docker run -it --rm alpine ash

docker run -it --rm alpine sh

उम्मीद है यह जानकारी सहायक होगी।


1
बीच क्या अंतर है /bin/ashऔर ash? के लिए समान /bin/shऔर sh
पीटर मॉर्टेंसन

1
हाय @ पीटर-मोर्टेंसन, अंतर यह है कि ashकेवल एक प्रतीकात्मक लिंक है /bin/ash। कुछ लिनक्स वितरण में प्रतीकात्मक लिंक नहीं हैं।
jansanchez

28

आजकल, अल्पाइन छवियां सीधे /bin/shडिफ़ॉल्ट रूप से बूट हो जाएंगी , निष्पादित करने के लिए एक शेल निर्दिष्ट किए बिना:

$ sudo docker run -it --rm alpine  
/ # echo $0  
/bin/sh  

यह तब से है जब alpineछवि Dockerfiles में अब एक CMDकमांड होता है, जो शेल को कंटेनर के शुरू होने पर निष्पादित करने के लिए निर्दिष्ट करता है CMD ["/bin/sh"]:।

पुराने अल्पाइन छवि संस्करणों (2017 के पूर्व) में, CMD कमांड का उपयोग नहीं किया गया था, क्योंकि Docker CMD के लिए एक अतिरिक्त परत बनाता था जिससे छवि का आकार बढ़ जाता था। यह कुछ ऐसा है जो अल्पाइन छवि डेवलपर्स से बचना चाहता था। हाल के डॉकर संस्करणों (1.10+) में, सीएमडी अब एक परत नहीं रखता है, और इसलिए इसे alpineछवियों में जोड़ा गया था । इसलिए, जब तक सीएमडी को ओवरराइड नहीं किया जाता है, हाल की अल्पाइन छवियां बूट हो जाएंगी /bin/sh

संदर्भ के लिए, ग्लाइडर लैब्स द्वारा आधिकारिक अल्पाइन डॉकफाइल्स के लिए निम्नलिखित प्रतिबद्ध देखें:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0d8d7e9169d04c7a3#diff-db3dfdee92cw17cf1717


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