सवाल पृष्ठभूमि मोड में चल रहे कंटेनर में बैश या एसएसएच कैसे प्राप्त करें?


मैं एक चलने वाले डॉकर कंटेनर में एसएसएच या बाश करना चाहता हूं। कृपया, उदाहरण देखें:

$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID  IMAGE            COMMAND    CREATED STATUS  PORTS          NAMES
665b4a1e17b6  webserver:latest /bin/bash  ...     ...     22/tcp, 80/tcp loving_heisenberg 

अब मैं ऐसा कुछ प्राप्त करना चाहता हूं (चलने वाले कंटेनर में जाएं):

$ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ root@665b4a1e17b6:/# 
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#

मैंने वग्रेंट का इस्तेमाल किया और मैं इसी तरह के व्यवहार को प्राप्त करना चाहता हूं vagrant ssh


797
2017-08-01 16:19


मूल


वैकल्पिक रूप से sudo docker exec -i -t 665b4a1e17b6 /bin/sh उपयुक्त प्रोग्राम और पैकेज स्थापित करने में सक्षम होने के लिए - fonjeekay


जवाब:


जवाब डॉकर है attach आदेश। तो ऊपर मेरे उदाहरण के लिए, समाधान होगा:

$ sudo docker attach 665b4a1e17b6 #by ID
or
$ sudo docker attach loving_heisenberg #by Name
$ root@665b4a1e17b6:/#

डॉकर संस्करण 1.3 या बाद के संस्करण के लिए: उपयोगकर्ता के लिए धन्यवाद WiR3D जिसने एक कंटेनर खोल खोलने का एक और तरीका सुझाया। अगर हम उपयोग करते हैं attach हम खोल के केवल एक उदाहरण का उपयोग कर सकते हैं। इसलिए यदि हम एक कंटेनर के खोल के नए उदाहरण के साथ एक नया टर्मिनल खोलना चाहते हैं, तो हमें केवल निम्न को चलाने की आवश्यकता है:

$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID

या

$ sudo docker exec -i -t loving_heisenberg /bin/bash #by Name
$ root@665b4a1e17b6:/#

1181
2017-08-05 06:01



वैकल्पिक रूप से, निष्पादित करें sudo docker attach loving_heisenberg - thiagowfx
अटैच कमांड मेरे लिए काम नहीं करता है, यह डॉकर को स्थिर करने का कारण बनता है .. कोई विचार क्यों हो रहा है? - Mo J. Mughrabi
Boot2docker उपयोगकर्ताओं के लिए एक अनुस्मारक: सुडो हटा दें :) - Henno
-i -t के बराबर होती है -it - pasha.zhukov
यह चुनने का एक खतरनाक उत्तर है और बहुत अधिक वोट दिया गया है। docker attachएक मोंगोडीबी उदाहरण में आईएनजी, उदाहरण के लिए, उदाहरण को मार डालेगा। जैसा कि अधिक विस्तार से समझाया गया है यह प्रश्न  attach तथा exec अलग जानवर हैं। - fwc


डॉकर 1.3 से आगे:

docker exec -it <containerIdOrName> bash

असल में, यदि डॉकर कंटेनर का उपयोग शुरू कर दिया गया था /bin/bash आदेश आप इसका उपयोग कर सकते हैं attach। यदि नहीं, तो आपको कंटेनर के अंदर बैश उदाहरण बनाने के लिए कमांड निष्पादित करने की आवश्यकता है exec

बैश को एक दुष्ट प्रक्रिया में चलने के बिना भी बाहर निकलने के लिए:

exit

हाँ, यह इतना आसान है।


586
2017-10-29 07:46



अभी भी पता चला है कि काम करने के लिए नैनो कैसे प्राप्त करें। झुकाव जिसमें संलयन से डॉकर-एसएसएच शामिल हो सकता है - WiR3D
डॉकर्स में डिफ़ॉल्ट रूप से बैश सेट करने का कोई तरीका है? - ipeacocks
@ipeacocks हाँ, अगर RUN डॉकरफाइल में कमांड है /bin/bash। लेकिन आप क्या मतलब है पर निर्भर करता है। यदि आप कंटेनर को चलाने के लिए चाहते हैं और उसी टर्मिनल में तुरंत बैश उपलब्ध करा रहे हैं तो उसके साथ चल रहे हैं -it यह करना चाहिए - WiR3D
डॉकर समूह का उपयोग करना बुरा अभ्यास है। डॉकर समूह में मौजूद कोई भी उपयोगकर्ता अनिवार्य रूप से सूडो का उपयोग किए बिना रूट अनुमतियों के साथ प्रयोग किया जाता है। projectatomic.io/blog/2015/08/... - Maiku Mori
मुझे लगता है कि यह एक मेजबान सुरक्षा दृष्टिकोण से, आप उपयोग करते हैं, इससे ज्यादा अंतर नहीं करता है sudo बनाम docker समूह। किसी भी तरह से, डॉकर में बनाया गया एक सुरक्षा छेद है जो अतिथि से होस्ट फ़ाइल सिस्टम में पूर्ण विशेषाधिकार प्रदान कर सकता है - भले ही आप डॉकर समूह का उपयोग करें या नहीं sudo कंटेनर लॉन्च करने के लिए। - nobar


हालांकि सवाल के लेखक ने विशेष रूप से कहा कि वे एक चल रहे कंटेनर में रुचि रखते हैं, यह भी ध्यान देने योग्य है कि यदि कंटेनर नहीं चल रहा है, लेकिन आप इसे चलाने के लिए इसे चलाने के लिए इसे चलाने के लिए चाहते हैं:

docker run -i -t --entrypoint /bin/bash <imageID>


101
2017-11-07 18:46



यह @ kraxor के उत्तर की तरह, एक अलग कंटेनर देता है। - Blaisorblade


इसे इस्तेमाल करे:

sudo docker run -i -t webserver /bin/bash

स्रोत: https://docs.docker.com/articles/basics/#running-an-interactive-shell


24
2017-08-01 16:29



यह उपयुक्त नहीं है, क्योंकि मुझे अलग कंटेनर आईडी मिलती है (root@42f1e37bd0e5:/# और नहीं root@665b4a1e17b6:/#) - Timur Fayzrakhmanov
लिंक मर चुका है, आपको अपडेट करना चाहिए - Ahmet Karakaya


@ तिमुर के उत्तर के आधार पर मैंने निम्नलिखित बनाया है आसान लिपि

सेट अप

डाल docker-ssh आपके अंदर फाइल करें $PATH निम्नलिखित सामग्री के साथ

#!/bin/bash -xe

# docker container id or name might be given as a parameter
CONTAINER=$1

if [[ "$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 (पहला कोल)

$> docker-ssh 50m3r4nd0m1d

13
2018-04-20 11:39



क्या मुझे पता चलेगा कि हमें अंत में क्यों चाहिए? - Nam G VU
लॉगिन खोल के रूप में बैश शुरू करने के लिए, पर्यावरण मानकों को पढ़ना (आदेश के ऊपर की रेखा में वर्णित) - Matyas


मैंने एक कंटेनरकृत एसएसएच सर्वर बनाया है जो किसी भी चल रहे कंटेनर को एसएसएच क्षमताओं को प्रदान करता है। आपको अपने कंटेनर को बदलने की जरूरत नहीं है। एकमात्र आवश्यकता यह है कि कंटेनर में बाश है।

यदि आपके पास नाम 'वेब-सर्वर 1' वाला कंटेनर है। निम्नलिखित डॉकर रन कमांड एक दूसरा कंटेनर शुरू करेगा जो पहले कंटेनर के लिए एसएसएच प्रदान करेगा।

docker run -ti --name sshd-web-server1 -e CONTAINER=web-server1 -p 2222:22 \
-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker \
jeroenpeeters/docker-ssh

अधिक पॉइंटर्स के लिए, चेकआउट https://github.com/jeroenpeeters/docker-ssh


8
2017-10-03 16:20



यह स्वीकार्य उत्तर होना चाहिए ^ - Nam G VU
वैसे, हम आपके समाधान का उपयोग कर एसएसएच सत्र शुरू करते समय .bashrc ऑटो लोड कैसे कर सकते हैं? गिथब पर भी एक मुद्दा पोस्ट किया github.com/jeroenpeeters/docker-ssh/issues/30 - Nam G VU


@jpetazzo एक है इस विषय के बारे में भयानक पोस्ट। संक्षिप्त जवाब का उपयोग करना होगा nsenter:

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid

पीएस .: पद की टिप्पणियों में चर्चा की जांच करना न भूलें ...

चियर्स


5
2018-03-14 10:12



यह एक पुरानी पोस्ट है कि अब वास्तव में जरूरी नहीं है। @ WiR3D के docker exec समाधान बल्कि अधिक सुविधाजनक है। - drevicko


यदि आपके कंटेनर में बैश स्थापित नहीं है (उदाहरण के लिए कंसुल) तो आप sh:

docker exec -it CONTAINER /bin/sh

या पहले / बिन में गोले की तलाश करें:

docker export CONTAINER|tar -t|egrep ^bin/

3
2017-07-29 13:40



क्या है "वाणिज्य दूत"? क्या आपके पास इसका संदर्भ है? क्या मतलब है आपका "कंसोल"? - Peter Mortensen


आप डॉकर कंटेनर को पाइपवर्क के साथ एक रूट करने योग्य आईपी पता भी दे सकते हैं, और उस एसएसएच के बाद उस नए आईपी पते के साथ मशीन में।

एप्लिकेशन-विशिष्ट कमांड जैसे उपयोग करने के बजाए यह अधिक "पारंपरिक" (एसएसएच) होगा docker attach, और अंततः इसे सिस्टम और संस्करणों में अधिक 'पोर्टेबल' बना देगा।


3
2017-10-29 11:58



कृपया, इसे कैसे करें इसे सरल तरीके से जोड़ें। अगर ईमानदार होना है, तो मुझे वास्तव में इसकी आवश्यकता है, लेकिन मेरे पास इसके लिए सबसे सरल समाधान खोजने का कोई समय नहीं है। क्या आप अपना उत्तर यहां पोस्ट कर सकते हैं? यह बहुत अच्छा होगा.. - Timur Fayzrakhmanov
इसे पूरा करने के 2 तरीके हैं, लेकिन यह आसान नहीं है, और एक बड़ी पोस्ट बन जाएगा। आप इसे देख सकते हैं संपर्क अपने आप से, पाइपवर्क या इसका उपयोग करने के लिए संपर्क, चुड़ैल अनिवार्य रूप से पाइपवर्क के समान ही पूरा करता है और थोड़ा सा सरल है, लेकिन आपको इसे मैन्युअल रूप से करने की आवश्यकता है। तो यह इस बात पर निर्भर करता है कि कितने सर्वर बात कर रहे हैं। यदि आप कुछ और विशिष्ट नहीं समझ सकते हैं, तो मुझे बताएं। लेकिन मेरे पास एक पूर्ण ट्यूटोरियल लिखने का समय भी नहीं है। - radriaanse
आप सही हैं - ऐसा करने का कोई स्पष्ट और सरल तरीका नहीं है (लिंक के लिए धन्यवाद, मुझे लगता है कि मैं इसे बाद में फिर से देखूंगा। - Timur Fayzrakhmanov


docker run -it openjdk:8

यह काम :-)


2
2017-09-06 15:11