පසුබිම් ප්‍රකාරයේදී ධාවනය වන බහාලුමක් තුළට bash හෝ ssh ලබා ගන්නේ කෙසේද?


953

මට අවශ්‍ය වන්නේ ධාවනය වන ඩොකර් බහාලුමක් තුළට තල්ලු කිරීමට හෝ තල්ලු කිරීමට ය. කරුණාකර, උදාහරණය බලන්න:

$ 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(හෝ සමහර විට 665b4a1e17b6ඒ වෙනුවට)
$ root@665b4a1e17b6:/#

කෙසේ වෙතත් මම ඉහත රේඛාව ධාවනය කරන විට මට නව CONTAINER ID ලැබේ:

$ root@42f1e37bd0e5:/#

මම වැග්‍රන්ට් භාවිතා කළ අතර ඒ හා සමාන හැසිරීමක් ලබා ගැනීමට මම කැමතියි vagrant ssh.


විකල්ප sudo docker exec -i -t 665b4a1e17b6 /bin/shවැඩසටහන් සහ පැකේජ ස්ථාපනය කිරීමට හැකිවීම සඳහා
යෙව්ගිනි ෂෂ්කොව්

3
ධාවන බහාලුම් වලට පහර දීමට SSH භාවිතා කිරීම දුර්වල පුරුද්දක් බව සලකන්න - මෙහි තාර්කිකත්වය බලන්න . sudo docker exec -i -t container-name /bin/bashයන්න ක්‍රමයක්.
patryk.beza

Answers:


1335

පිළිතුර ඩොකර්ගේ අණයි 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:/#

5
විකල්පයක් ලෙස, ක්‍රියාත්මක කරන්නsudo docker attach loving_heisenberg
thiagowfx

54
ඇමුණුම් විධානය මට වැඩ නොකරයි, එය ඩොකර් කැටි කිරීමට හේතු වේ .. කිසියම් අදහසක් එය සිදුවන්නේ ඇයි?
මෝ ජේ. මුග්රාබි

10
Boot2docker භාවිතා කරන්නන් සඳහා මතක් කිරීමක්: sudo ඉවත් කරන්න :)
Henno

18
-i -tequals-it
pasha.zhukov

49
මෙය තෝරා ගත යුතු භයානක පිළිතුරකි. docker attachනිදසුනක් ලෙස, මොන්ගෝ ඩීබී නිදසුනකට ඇතුලත් කිරීම එම අවස්ථාව විනාශ කරයි. මෙම ප්රශ්නයේ වඩාත් විස්තරාත්මකව විස්තර කර ඇති පරිදි attachසහ execවිවිධ සතුන් වේ.
fwc

695

ඩෝකර් 1.3 සිට:

docker exec -it <containerIdOrName> bash

මූලික වශයෙන්, ඩොකර් කන්ටේනරය /bin/bashවිධානය භාවිතා කර ආරම්භ කර ඇත්නම් ඔබට එය භාවිතා කළ හැකිය attach. එසේ නොවේ නම්, ඔබ බහාලුම තුළ Bash නිදසුනක් නිර්මාණය කිරීම සඳහා විධානය ක්‍රියාත්මක කළ යුතුය exec.

දඩබ්බර ක්‍රියාවලියක් තුළ බාෂ් ධාවනය නොකොට බාෂ් වෙතින් පිටවීම:

exit

ඔව්, එය එතරම්ම සරලයි.


නැනෝ වැඩ කරන්නේ කෙසේදැයි තවමත් සොයාගෙන නැත. විලයනයෙන් ඩොකර්-එස්එස් සම්බන්ධ විය හැකි යැයි සිතන්න
WiR3D

ඩොකර් වල පෙරනිමියෙන් බැෂ් සැකසීමට ක්‍රමයක් තිබේද?
ipeacocks

ඩොකර්ෆයිල් හි RUNවිධානය නම් @ipeacocks ඔව් /bin/bash. නමුත් ඔබ අදහස් කරන දේ රඳා පවතී. ඔබට කන්ටේනරය ධාවනය කිරීමට අවශ්‍ය නම් සහ එම පර්යන්තයේම වහාම -it
බාෂ්

10
ඩොකර් කණ්ඩායම භාවිතා කිරීම නරක පුරුද්දකි. ඩොකර් කණ්ඩායමේ සිටින ඕනෑම පරිශීලකයෙකු මූලික වශයෙන් සුඩෝ භාවිතා කිරීමකින් තොරව මූල අවසරයන් සමඟ භාවිතා කරයි. projectatomic.io/blog/2015/08/…
මයිකු මෝරි

1
මම හිතන්නේ එය සත්කාරක ආරක්ෂක දෘෂ්ටි කෝණයෙන් බලන කල, ඔබ sudoඑදිරිව dockerකණ්ඩායම භාවිතා කළත් විශාල වෙනසක් සිදු නොවේ . කෙසේ හෝ වේවා, ඩොකර් තුළට සාදා ඇති ආරක්ෂක සිදුරක් ඇති අතර එමඟින් ආගන්තුකයාගෙන් ධාරක ගොනු පද්ධතියේ පූර්ණ වරප්‍රසාද ලබා දිය හැකිය - ඔබ ඩොකර් කණ්ඩායම භාවිතා කරන්නේද නැතහොත් sudoබහාලුම දියත් කරන්නේද යන්න නොසලකා .
නොබාර්

127

ප්‍රශ්නයේ කතුවරයා ඔවුන් ධාවන බහාලුමක් ගැන උනන්දුවක් දක්වන බව විශේෂයෙන් පැවසුවද, කන්ටේනරය ක්‍රියාත්මක නොවන්නේ නම්, නමුත් ඔබ එය වටා ධාවනය කිරීමට කැමති නම් එය ක්‍රියාත්මක කළ හැකිය:

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


10
එය ra ක්‍රැක්සර්ගේ පිළිතුර මෙන් වෙනස් බහාලුමක් ලබා දෙයි.
බ්ලයිසෝර්බ්ලේඩ්


19

@ තිමූර්ගේ පිළිතුර මත පදනම්ව මම පහත දැක්වෙන පහසු පිටපතක් නිර්මාණය කර ඇත්තෙමි

පිහිටුවීම

පහත සඳහන් අන්තර්ගතයන් සමඟ 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

මට දැනගන්න පුළුවන්ද අපට අවසානයේ -l අවශ්‍ය වන්නේ ඇයි?
Nam G VU

පිවිසුම් කවචයක් ලෙස බැෂ් ආරම්භ කිරීමට, පරිසර පරාමිතීන් කියවීම (විධානයට ඉහළින් ඇති පේළියේ විස්තර කර ඇත)
මාටියාස්

15

ඔබේ බහාලුමේ බාෂ් ස්ථාපනය කර නොමැති නම් ඔබට උත්සාහ කළ හැකිය:

docker exec -it CONTAINER /bin/sh

නැතහොත් පළමුව / බින් තුළ ෂෙල් වෙඩි සොයන්න:

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

"කොන්සල්" යනු කුමක්ද? ඔබට ඒ සඳහා යොමු කිරීමක් තිබේද? ඔබ අදහස් කරන්නේ "කොන්සෝලය" ද ?
පීටර් මෝර්ටෙන්සන්

9

ධාවනය වන ඕනෑම බහාලුමකට SSH හැකියාවන් සපයන බහාලුම් කළ SSH සේවාදායකයක් මම නිර්මාණය කර ඇත්තෙමි. ඔබේ බහාලුම වෙනස් කිරීමට ඔබට අවශ්‍ය නැත. එකම අවශ්‍යතාවය වන්නේ කන්ටේනරය බෑෂ් තිබීමයි.

ඔබට 'වෙබ්-සර්වර් 1' යන නම සහිත බහාලුමක් තිබේ නම්. පහත දැක්වෙන ඩොකර් ධාවන විධානය මඟින් පළමු බහාලුම සඳහා SSH සපයන දෙවන බහාලුමක් ආරම්භ කරනු ඇත.

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


මෙය පිළිගත් පිළිතුර විය යුතුය ^
Nam G VU

මාර්ගය වන විට, ඔබේ විසඳුම භාවිතා කරමින් ssh සැසියක් ආරම්භ කිරීමේදී අපට .bashrc ස්වයංක්‍රීයව පැටවිය හැක්කේ කෙසේද? ද github පිළිබඳ ප්රශ්නය පල github.com/jeroenpeeters/docker-ssh/issues/30
වියට්නාමය ජී VU

6

pjpetazzo ට මෙම විෂය ගැන පුදුමාකාර සටහනක් ඇත . කෙටි පිළිතුර වනුයේ nsenter:

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

PS: ලිපියේ අදහස් දැක්වීමේදී සාකච්ඡාව පරීක්ෂා කිරීමට අමතක නොකරන්න ...

චියර්ස්


1
එය තරමක් පැරණි තනතුරක් වන අතර එය තවදුරටත් අවශ්‍ය නොවේ . R WiR3D හි docker execවිසඳුම වඩා පහසුය.
ඩ්‍රෙවිකෝ

4

ඔබට ඩෝකර් කන්ටේනරයට පයිප්වර්ක් සමඟ ගමන් කළ හැකි IP ලිපිනයක් ලබා දිය හැකි අතර, ඉන් පසුව SSH එම නව IP ලිපිනය සහිත යන්ත්‍රයට ඇතුල් කළ හැකිය.

මෙය යෙදුම්-විශේෂිත විධානයක් භාවිතා කරනවා වෙනුවට වඩා "සාම්ප්‍රදායික" (ssh) docker attachවනු ඇති අතර අවසානයේදී එය පද්ධති සහ අනුවාද හරහා වඩාත් 'අතේ ගෙන යා හැකි' බවට පත් කරනු ඇත.


කරුණාකර, එය කරන්නේ කෙසේද යන්න සරල ක්‍රමය එක් කරන්න. ඇත්තම කිව්වොත්, මට එය ඇත්තෙන්ම අවශ්‍යයි, නමුත් ඒ සඳහා සරලම විසඳුම සෙවීමට මට වෙලාවක් නැත. ඔබේ පිළිතුර මෙහි පළ කළ හැකිද? ඒක නියමයි ..
තිමූර් ෆයිස්රාක්මානොව්

2
මෙය ඉටු කර ගැනීමට ක්‍රම 2 ක් ඇත, නමුත් එය සරල නොවන අතර එය විශාල තනතුරක් බවට පත්වනු ඇත. පයිප්ප වැඩ හෝ මෙම සබැඳිය භාවිතා කිරීම සඳහා ඔබට මෙම සබැඳිය තනිවම පරීක්ෂා කර බැලිය හැකිය , මායාකාරිය අත්‍යවශ්‍යයෙන්ම පයිප්ප වැඩ මෙන් ම ඉටු කරන අතර එය තරමක් සරල ය, නමුත් ඔබ එය අතින් කළ යුතුය. එබැවින් එය කථා කරන සේවාදායකයන් ගණන මත රඳා පවතී. ඔබට වඩාත් නිශ්චිත යමක් හදුනාගත නොහැකි නම්, මට දන්වන්න. නමුත් මට සම්පූර්ණ නිබන්ධනයක් ලිවීමට කාලය නොමැත.
radriaanse

ඔබ හරි - එය කිරීමට පැහැදිලි හා සරල ක්‍රමයක් නොමැත (සබැඳි වලට ස්තූතියි, මම පසුව එය නැවත සලකා බලනු ඇතැයි මම සිතමි.
තිමූර් ෆයිස්රාක්මානොව්

3

සමහර විට ඩෝකර් බහාලුමක් තුළට කඩා වැටීමට පහසු වනු ඇත, විශේෂයෙන් සංවර්ධනය අතරතුර. පහත දැක්වෙන ඩෝකර් රූපය පුද්ගලික යතුරක් භාවිතා කර බහාලුමක් තුළට තල්ලු කිරීමට ඉඩ දෙයි:

උබුන්ට්විත් එස්එස්එච්-ඩොකර්

Dockerfile හි සාරාංශය https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .



1

ඇතුලට යන්න

goinsideවිධාන රේඛා මෙවලම සමඟ ස්ථාපනය කරන්න:

sudo npm install -g goinside

නිසි පර්යන්ත ප්‍රමාණයක් සහිත ඩොකර් බහාලුමක් තුළට යන්න:

goinside docker_container_name

වැඩි විස්තර සඳහා මෙය පරීක්ෂා කරන්න .


0

ධාවනය වන භාජනයකට තල්ලු කිරීමට, මෙය ටයිප් කරන්න:

docker exec -t -i container_name /bin/bash

1
මෙම වුවත් @AdamKalnas ලෙස එම පිළිතුර
Bruni

0

තොරතුරු සඳහා පමණි. ඔබට ඩීමන් නොවන සරල බහාලුමක් තුළට පිවිසීමට අවශ්‍ය නම්, ඔබ පහත දැක්වෙන විධානයන් භාවිතා කළ යුතුය:

docker start {id}
docker attach {id}

-1

උදාහරණයක් ලෙස දත්ත පමණක් සහිත බහාලුමක් මෙන් කන්ටේනරය නැවැත්වුවහොත් හොඳ විසඳුමක් නම් ඔබට දත්ත කන්ටේනරයට ඇමිණීමට අවශ්‍ය සෑම අවස්ථාවකම ඉවතලන කන්ටේනරයක් ධාවනය කිරීමයි. මෙම අවස්ථාවේ දී දත්ත බහාලුම මුළුමනින්ම හිස් විය හැකිය, මන්ද තාවකාලික බහාලුමට OS මෙවලම් ඇති බැවිනි.

$ docker run --rm --volumes-from mydata -it ubuntu bash
root@645045d3cc87:/# ls /mydata
root@645045d3cc87:/# touch /mydata/foo
root@645045d3cc87:/# exit
exit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.