ব্যাকগ্রাউন্ড মোডে চলমান পাত্রে কীভাবে বাশ বা এসএসএইচ পাবেন?

আমি একটি চলমান ডকার পাত্রে এসএসএইচ বা ব্যাশ করতে চাই উদাহরণ দেখুন:

$ 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.

উত্তর হল ডকারের attach কমান্ড. সুতরাং উপরে আমার উদাহরণের জন্য, সমাধানটি হবে:

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

ডকার সংস্করণ 1.3 বা তার পরে: ব্যবহারকারীকে ধন্যবাদ ডাব্লুআইআর 3 ডি কে একটি ধারক এর শেল পেতে অন্য উপায় প্রস্তাব. যদি আমরা ব্যবহার করি attach আমরা শেল শুধুমাত্র একটি দৃষ্টান্ত ব্যবহার করতে পারেন. সুতরাং আমরা যদি কোনও ধারকটির শেলের নতুন উদাহরণ সহ একটি নতুন টার্মিনাল খুলতে চাই তবে আমাদের কেবল নিম্নলিখিতটি চালানো দরকার:

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

অথবা

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

ডকার 1.3 থেকে:

docker exec -it <containerIdOrName> bash

মূলত, যদি ডকার ধারকটি ব্যবহার শুরু করা হয় /bin/bash কমান্ড আপনি এটি ব্যবহার করে অ্যাক্সেস করতে পারেন attach. যদি তা না হয় তবে আপনাকে ব্যবহার করে ধারকটির ভিতরে বাশ উদাহরণ তৈরি করতে কমান্ডটি কার্যকর করতে হবে exec.

এছাড়াও একটি দুর্বৃত্ত প্রক্রিয়া চলমান বাশ গিয়েই বাশ থেকে প্রস্থান করার জন্য:

exit

হাঁ, এটা যে সহজ.

যদিও প্রশ্নের লেখক বিশেষভাবে বলেছেন যে তারা একটি চলমান ধারকটিতে আগ্রহী, এটিও লক্ষণীয় যে যদি ধারকটি চলমান না থাকে তবে আপনি এটি চালাতে চান চারপাশে খোঁচা দিতে আপনি চালাতে পারেন:

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

এই চেষ্টা করুন:

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

উৎস: https://docs.docker.com/engine/reference/commandline/run/

@ তৈমুরের উত্তরের উপর ভিত্তি করে আমি নিম্নলিখিতটি তৈরি করেছি হ্যান্ডি স্ক্রিপ্ট

সেটআপ

করা 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 (প্রথম কর্নেল)

$> docker-ssh 50m3r4nd0m1d

যদি আপনার পাত্রে বাশ ইনস্টল না থাকে তবে আপনি চেষ্টা করতে পারেন:

docker exec -it CONTAINER /bin/sh

অথবা প্রথমে /বিন শেল সন্ধান করুন:

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

আমি একটি কনটেইনারাইজড এসএসএইচ সার্ভার তৈরি করেছি যা কোনও চলমান ধারককে এসএসএইচ ক্ষমতা সরবরাহ করে আপনি আপনার ধারক পরিবর্তন করতে হবে না. শুধুমাত্র প্রয়োজন ধারক ব্যাশ আছে.

আপনার যদি নাম 'ওয়েব-সার্ভার 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

অনুসরণ করুন অনুসরণ করা কর্মসমূহ: অনুসরণ না করা অবরুদ্ধ অবরোধ মুক্ত মুলতুবি বাতিল এই বিষয় সম্পর্কে দুর্দান্ত পোস্ট. সংক্ষিপ্ত উত্তর ব্যবহার করা হবে nsenter:

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

পোস্ট মন্তব্য আলোচনা চেক করতে ভুলবেন না. ..

চিয়ার্স

আপনি ডকার ধারকটিকে পাইপওয়ার্ক সহ একটি রুটেবল আইপি ঠিকানাও দিতে পারেন এবং এর পরে এসএসএইচ সেই নতুন আইপি ঠিকানা দিয়ে মেশিনে

অ্যাপ্লিকেশন - নির্দিষ্ট কমান্ডটি ব্যবহার করার পরিবর্তে এটি আরও "ট্র্যাডিশনাল" (এসএসএইচ) হবে docker attach, এবং শেষ পর্যন্ত সিস্টেম এবং সংস্করণ জুড়ে এটি আরো 'পোর্টেবল' করতে হবে.

কখনও কখনও এটি একটি ডকার ধারক মধ্যে এসএসএইচ করতে সক্ষম হতে সহজ হবে, বিশেষ করে উন্নয়নের সময় নিম্নলিখিত ডকার চিত্রটি একটি ব্যক্তিগত কী ব্যবহার করে একটি পাত্রে এসএসএইচ করতে দেয়:

উবুন্তুউইথশ-ডকার

ডকারফিল এর সারকথা হল https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07.

নোট করুন যে চলমান পাত্রে বাশে এসএসএইচ ব্যবহার করা দুর্বল অনুশীলন-দেখুন [এখানে যুক্তি] (If you run SSHD in your Docker containers, you're doing it wrong!). সুডো ডকার এক্সেক-আই-টি কনটেইনার-নাম/বিন / বাশ যেতে একটি উপায়.

বিকল্পভাবে` সুডো ডকার এক্সেক-আই-টি 665 বি 4 এ 1 ই 17 বি 6 /বিন/এসএইচ ’ এপিটি প্রোগ্রাম এবং প্যাকেজ ইনস্টল করতে সক্ষম হতে