كيفية الحصول على باش أو سه في حاوية قيد التشغيل في وضع الخلفية?

أريد أن سه أو باش في حاوية عامل الميناء قيد التشغيل. من فضلك ، انظر المثال:

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

لاحظ أن استخدام سش لسحق في حاوية تشغيل هو ممارسة سيئة-انظر الأساس المنطقي هنا.` سودو عامل الميناء إكسيك-ط-تي حاوية اسم/بن / باش ’ هو وسيلة للذهاب.

بدلا من ذلك ‘سودو عامل الميناء إكسيك-أي-تي 665 ب 4 أي 1 إي 17 بي 6 / بن / ش’ لتكون قادرة على تثبيت برامج ملائمة وحزم