मैं एक चल रहे डॉकर कंटेनर में एसएसएच या बैश करना चाहता हूं । कृपया, उदाहरण देखें:
$ sudo docker run -d webserverwebserver is clean image from ubuntu:14.04$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
अब मैं ऐसा कुछ प्राप्त करना चाहता हूं (चल रहे कंटेनर में जाएं):
$ sudo docker run -t -i webserver (या शायद 665b4a1e17b6 इसके बजाय) $ root@665b4a1e17b6:/#
हालांकि जब मैं ऊपर लाइन चलाता हूं तो मुझे नई कंटेनर आईडी मिलती है:
$ root@42f1e37bd0e5:/#
मैंने योनि का इस्तेमाल किया और मैं एक समान व्यवहार प्राप्त करना चाहता हूं vagrant ssh.
डॉकर संस्करण 1.3 या बाद के संस्करण के लिए: उपयोगकर्ता के लिए धन्यवाद WiR3D कंटेनर के खोल को प्राप्त करने का दूसरा तरीका किसने सुझाया । अगर हम उपयोग करते हैं attach हम शेल के केवल एक उदाहरण का उपयोग कर सकते हैं । इसलिए यदि हम कंटेनर के खोल के नए उदाहरण के साथ एक नया टर्मिनल खोलना चाहते हैं, तो हमें केवल निम्नलिखित को चलाने की आवश्यकता है:
$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID
असल में, अगर डॉकर कंटेनर का उपयोग शुरू किया गया था /bin/bash कमांड का उपयोग करके आप इसे एक्सेस कर सकते हैं attach. यदि नहीं, तो आपको कंटेनर के अंदर बैश इंस्टेंस बनाने के लिए कमांड निष्पादित करने की आवश्यकता है exec.
एक दुष्ट प्रक्रिया में चल रहे बैश को छोड़ने के बिना बैश से बाहर निकलने के लिए भी:
हालांकि प्रश्न के लेखक ने विशेष रूप से कहा कि वे एक चल रहे कंटेनर में रुचि रखते हैं, यह भी ध्यान देने योग्य है कि यदि कंटेनर नहीं चल रहा है, लेकिन आप इसे चलाने के लिए अपने चारों ओर प्रहार करना चाहते हैं:
@तैमूर के जवाब के आधार पर मैंने निम्नलिखित बनाया है हैंडी स्क्रिप्ट
सेटअप
डाल दिया docker-ssh अपने में फ़ाइल $PATH निम्नलिखित सामग्री के साथ
#!/bin/bash -xe# docker container id or name might be given as a parameterCONTAINER=$1if [[ "$CONTAINER" == "" ]]; then # if no id given simply just connect to the first running container CONTAINER=$(docker ps | grep -Eo "^[0-9a-z]{8,}\b")fi# start an interactive bash inside the container# note some containers don't have bash, then try: ash (alpine), or simply sh# the -l at the end stands for login shell that reads profile files (read man)docker exec -i -t $CONTAINER bash -l
नोट: कुछ कंटेनर में शामिल नहीं है bash, लेकिन अ ash, sh आदि । इन मामलों में bash उपरोक्त स्क्रिप्ट में प्रतिस्थापित किया जाएगा ।
उपयोग
यदि आपके पास केवल एक चलने वाला उदाहरण है, तो बस चलाएं
$> docker-ssh
अन्यथा, इसे एक डॉकर आईडी पैरामीटर प्रदान करें जो आपको मिलता है docker ps (प्रथम कर्नल)
मैंने एक कंटेनरीकृत एसएसएच सर्वर बनाया है जो किसी भी चल रहे कंटेनर को एसएसएच क्षमताएं प्रदान करता है । आप अपने कंटेनर बदलने की जरूरत नहीं है. केवल आवश्यकता यह है कि कंटेनर में बैश है ।
यदि आपके पास 'वेब-सर्वर 1' नाम वाला कंटेनर है । निम्नलिखित डॉकर रन कमांड एक दूसरा कंटेनर शुरू करेगा जो पहले कंटेनर के लिए एसएसएच प्रदान करेगा ।
आप डॉकर कंटेनर को पाइपवर्क के साथ एक रूट करने योग्य आईपी पता भी दे सकते हैं, और उसके बाद उस नए आईपी पते के साथ मशीन में एसएसएच ।
यह एप्लिकेशन-विशिष्ट कमांड का उपयोग करने के बजाय अधिक "पारंपरिक" (एसएसएच) होगा docker attach, और अंततः इसे सिस्टम और संस्करणों में अधिक 'पोर्टेबल' बना देगा ।
कभी-कभी डॉकर कंटेनर में एसएसएच करने में सक्षम होना आसान होगा, खासकर विकास के दौरान । निम्नलिखित डॉकर छवि एक निजी कुंजी का उपयोग करके कंटेनर में एसएसएच करने की अनुमति देती है:
ध्यान दें कि चल रहे कंटेनर में बैश करने के लिए एसएसएच का उपयोग करना खराब अभ्यास है-देखें यहां तर्क । सुडो डॉकर निष्पादन-आई-टी कंटेनर-नाम/बिन / बैश जाने का एक तरीका है ।