কোনও পাত্রে এটি বন্ধ না করেই আলাদা করার সঠিক উপায়


313

ডকার ১.১.২ (সর্বশেষ) এ, কোনও পাত্রে এটি বন্ধ না করেই আলাদা করার সঠিক উপায় কী?

সুতরাং উদাহরণস্বরূপ, যদি আমি চেষ্টা করি:

  • docker run -i -t foo /bin/bash অথবা
  • docker attach foo (ইতিমধ্যে চালানো ধারক জন্য)

উভয়ই আমাকে পাত্রে টার্মিনালে নিয়ে যায়, আমি কীভাবে ধারকটির টার্মিনালটি বন্ধ না করে প্রস্থান করব?

exitএবং CTR+Cউভয় পাত্রে থামান।


"ধারক" হ'ল সীমাবদ্ধ নেমস্পেসের একটি প্রক্রিয়া (একটি প্রক্রিয়া নেমস্পেস, একটি ফাইল সিস্টেমের নামস্থান, ইত্যাদি) যা প্রক্রিয়াগুলি চলতে পারে name যদি আপনার একটি নেমস্পেসের অভ্যন্তরে কোনও প্রক্রিয়া না থাকে, তাহলে কি সেই নামস্থানটি বিদ্যমান? এটি ভার্চুয়াল মেশিনের মতো নয় যেখানে একটি কার্নেল উত্তর ঘড়ি বিঘ্ন ঘটায় এবং সি। হোক না কেন।
চার্লস ডাফি

উত্তর:


166

আপডেট: নীচের উত্তরগুলিতে উল্লিখিত হিসাবে Ctrl+ p, Ctrl+ qএখন ইন্টারেক্টিভ মোডকে ডিমন মোডে রূপান্তরিত করবে।


ভাল Ctrl+ C(বা Ctrl+ \) আপনাকে ধারক থেকে আলাদা করতে হবে তবে এটি ধারকটিকে মেরে ফেলবে কারণ আপনার মূল প্রক্রিয়াটি হ'ল বাশ।

ডকার সম্পর্কে একটি সামান্য পাঠ। ধারকটি সত্যিকারের সম্পূর্ণ কার্যক্ষম ওএস নয়। আপনি যখন একটি ধারক পরিচালনা করেন আপনি প্রবর্তন করেন এমন প্রক্রিয়াটি পিআইডি 1 নেবে এবং ডিআর শক্তি গ্রহণ করবে। সুতরাং যখন প্রক্রিয়াটি সমাপ্ত হয় তখন একটি নতুন প্রক্রিয়া চালু না হওয়া পর্যন্ত ডেমন কনটেইনারটি থামান (ডকার শুরু করার মাধ্যমে) (বিষয়টি সম্পর্কে আরও ব্যাখ্যা http://phusion.github.io/baseimage-docker/#intro )

আপনি যদি এমন একটি ধারক চান যা সারাক্ষণ বিচ্ছিন্ন মোডে চলে, আমি আপনাকে ব্যবহার করার পরামর্শ দিই

docker run -d foo

ধারকটিতে একটি এসএসএস সার্ভার সহ। (সহজ উপায় হ'ল ডকারাইজিং ওপেনশ টিউটোরিয়ালটি https://docs.docker.com/engine/example/running_ssh_service/ অনুসরণ করুন )

অথবা আপনি কেবল নিজের ধারকটির মাধ্যমে আবার লঞ্চ করতে পারেন

docker start foo

(এটি ডিফল্টরূপে পৃথক করা হবে)


3
বেসিমেজ-ডকারের জন্য +1। ডকারের শক্ত অংশগুলি সম্পর্কে পরামর্শ সহ একটি টেম্পলেট রয়েছে তা জেনে ভাল লাগল।
এমটিএমএকডোনাল্ড


1
একটি অন্তর্নির্মিত মোড চালানো খুব সহায়ক ছিল। এছাড়াও, ডকফাইফাইলের মাধ্যমে এসএসএস শুরু করার লিঙ্কটি আমার জীবনকে সহজ করে তুলেছে।
রবি

56
Ctrl-p, Ctrl-q ব্যবহার করে বিচ্ছিন্ন করুন । এই উত্তরের পরামর্শটি একটি ধারককে হত্যা করবে।
তারানাকি

4
এটি আমার পক্ষে কাজ করেছে (নীচের উত্তর থেকে নেওয়া): শুরু করুন -ti -d, তারপরে সংযুক্ত করুন docker attach, তারপরে প্রথমে সিটিআরএল + পি এবং তারপরে সিটিআরএল + কিউ দিয়ে আলাদা করুন । আমি ভেবেছিলাম, আমি কেবল একটি কীবোর্ড শর্টকাট ব্যবহার করতে পারি।
সিজিএফএক্স

526

টাইপ Ctrl+ pতারপর Ctrl+ q। এটি আপনাকে ইন্টারেক্টিভ মোডকে ডেমন মোডে পরিণত করতে সহায়তা করবে।

Https://docs.docker.com/v1.7/articles/basics/#running-an-interactive- Shell দেখুন ।

# To detach the tty without exiting the shell,
# use the escape sequence Ctrl-p + Ctrl-q
# note: This will continue to exist in a stopped state once exited (see "docker ps -a")

4
এটি (কোনও সংযুক্ত ওয়েকান পাত্রে প্রস্থান করার চেষ্টা করছে) দিয়ে কাজ করছে না বলে মনে হচ্ছে।
বিপদ 89

7
আমি এই পৃষ্ঠাটি এতবার দেখেছি কারণ আমি এই কী সংমিশ্রণটি অবিকল মনে করতে পারি নি! :-D
থমমে গওদা

10
@ বিপদ 89 সিটিআরএল-পি, সিটিআরএল-কি কেবল তখনই কাজ করবে যখন আপনি নিজের ধারকটিকে ইন্টারেক্টিভ মোড (-আইটি) দিয়ে শুরু করেছেন। আপনি যদি এটি ডিমন মোডে (-ডি) শুরু করেন এবং এর সাথে সংযুক্ত থাকেন তবে আপনি কেবল এটি থেকে প্রস্থান করতে পারেন এবং এটি এখনও পটভূমিতে চলবে।
রিসি

1
@ স্লিমশ্যাডি Ctrl + P টিপুন, তারপরে প্রস্থান করতে Ctrl + Q টি চাপুন, তাদের মধ্যে একটিও নয়, ক্রম হিসাবে।
মহিয়াদ্দিন আলাউদ্দিন

160

আমি এটি খনন করেছি এবং উপরের সমস্ত উত্তর আংশিকভাবে সঠিক। এটি সমস্ত কীভাবে ধারক চালু হয় তার উপর নির্ভর করে। কনটেইনারটি চালু হওয়ার সময় এটি নীচে নেমে আসে:

  • একটি TTY বরাদ্দ ছিল ( -t)
  • stdin খুলে রেখে গিয়েছিলো ( -i)

^P^Q কাজ করে, তবে কেবল যখন -tএবং ধারকটি-i চালু করতে ব্যবহৃত হয়:

[berto@g6]$ docker run -ti -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
b26e39632351192a9a1a00ea0c2f3e10729b6d3e22f8e0676d6519e15c08b518

[berto@g6]$ docker attach test
# here I typed ^P^Q
read escape sequence

# i'm back to my prompt
[berto@g6]$ docker kill test; docker rm -v test
test
test

ctrl+c কাজ করে, তবে কেবল যখন -t( বিনা -i ) কনটেইনারটি চালু করতে ব্যবহৃত হবে:

[berto@g6]$ docker run -t -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
018a228c96d6bf2e73cccaefcf656b02753905b9a859f32e60bdf343bcbe834d

[berto@g6]$ docker attach test
^C

[berto@g6]$    

বিচ্ছিন্ন করার তৃতীয় উপায়

ধারকটি না মেরে আলাদা করার উপায় রয়েছে; আপনার আর একটি শেল দরকার। সংক্ষেপে, এটি অন্য শেলটিতে চালিত করে আলাদা করে রাখুন এবং ধারকটি চালিয়ে যেতে হবে pkill -9 -f 'docker.*attach':

[berto@g6]$ docker run -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
b26e39632351192a9a1a00ea0c2f3e10729b6d3e22f8e0676d6519e15c08b518

[berto@g6]$ docker attach test
# here I typed ^P^Q and doesn't work
^P
# ctrl+c doesn't work either
^C
# can't background either
^Z

# go to another shell and run the `pkill` command above

# i'm back to my prompt
[berto@g6]$

কেন? কারণ আপনি সেই প্রক্রিয়াটিকে হত্যা করছেন যা আপনাকে ধারকটির সাথে সংযুক্ত করেছে, কেবল ধারক নয়।


2
তৃতীয় উপায় আমার জন্য কাজ করে। ধন্যবাদ। আপনি যদি বেশ কয়েকটি দৃষ্টান্ত সংযোগ করছেন এবং কেবল একটির থেকে আলাদা করতে চান। নির্দিষ্ট প্রক্রিয়াটি মেরে ফেলতে পারে: PS -ef | গ্রেপ সংযুক্তি -> পিড পান। তারপরে:
মেরুন


আমাদের কেন -9 দরকার? আমি লক্ষ্য করেছি যে আমরা যদি -9 ব্যবহার না করি তবে এটি ধারকটি বন্ধ করে দেবে।
অ্যাঞ্জেলো

অন্যান্য সংকেতগুলি হ'ল, সংকেত। তারা প্রক্রিয়াটি কী ধরণের সংকেত বলে এবং এটিকে অভিনয় করার এবং কিছু করার সুযোগ দেয়। kill -9সংকেত না। প্রক্রিয়াটি সমাপ্ত হয়ে যায় এবং কোনও পুনরায় সাহস হয় না। আমার ধারণা অন্যান্য সংকেতগুলি ধারকটিকে শাট ডাউন করার সুযোগ দেয়, যদিও -9তা হয় না।
বার্টো

1
এটি অত্যন্ত সহায়ক ছিল। ধন্যবাদ!
ইভান জমির

40

আপনি যদি "ডকার সংযুক্ত" ধারক আইডি "করেন তবে আপনি পাত্রে প্রবেশ করুন the ধারকটি না থামিয়ে পাত্রে প্রস্থান করতে আপনাকে Ctrl+ P+ প্রবেশ করাতে হবেQ


6
Ctrl + P এবং Ctrl + Q
sib10

4
Ctrl + P, Q (এখনও Ctrl ধরে আছে);)
ডিম্পিয়াक्स

এটি আমাকে ফেরত দেয়:Error response from daemon: Container f560a0ad6806150b2775d0b6e6d5f7065a03775bae858fb4fb7df05a277976db is not running
ওয়েবউইম্যান

30

আমি আশ্বিনের উত্তরকে সবচেয়ে সঠিক বলে বিবেচনা করি, আমার পুরানো উত্তর নীচে রয়েছে।


আমি এখানে আরও একটি বিকল্প যুক্ত করতে চাই যা নীচের মত ধারকটি চালানো

docker run -dti foo bash

তারপরে আপনি পাত্রে প্রবেশ করতে পারেন এবং এটি দিয়ে বাশ চালাতে পারেন

docker exec -ti ID_of_foo bash

এসএসডিডি ইনস্টল করার দরকার নেই :)


আমি মনে করি দ্বিতীয় কমান্ডে আপনাকে ফু এর ধারক আইডি দিয়ে ফু বদলাতে হবে
নেহাল জে ওয়াণী

এই প্রসঙ্গে, আমি মনে করি docker attachপ্রথম বাশ রানের সাথে সংযুক্ত হয়ে আরও মানক হবে। docker execএখানেও কাজ করে, তবে এটি প্রথমটি ছাড়াও একটি নতুন বাশ প্রক্রিয়া তৈরি করে। অবশ্যই, প্রক্রিয়াটি প্রথমটির একই প্রসঙ্গ / পরিবেশ / ধারকের মধ্যে তৈরি করা হয়েছে, তবে এটি ভিন্ন একটি (আপনার পছন্দসই টার্মিনাল এমুলেটরে একটি নতুন টার্মিনাল ট্যাব খোলার উপমা হবে)।
thiagowfx

20

একটি ইন্টারেক্টিভ ধারক থেকে বিচ্ছিন্ন করার ডিফল্ট উপায়টি হ'ল Ctrl+ P Ctrl+ Q, তবে কোনও নতুন ধারক চালানোর সময় বা --detach-key পতাকা ব্যবহার করে বিদ্যমান ধারকটিতে সংযুক্ত হওয়ার সময় আপনি এটিকে ওভাররাইড করতে পারেন ।


16

যদি আপনি এর মাধ্যমে সংযুক্ত হন docker attach, আপনি ডকার সংযুক্তি প্রক্রিয়াটি মেরে আলাদা করতে পারেন। আপনার ধারকটিতে Ctrl + C না এড়াতে সিগ-প্রক্সি প্যারামিটার ব্যবহার করা আরও ভাল উপায়:

docker attach --sig-proxy=false [container-name]

docker runকমান্ডের জন্য একই বিকল্প উপলব্ধ ।


6
যদিও --sig-proxy = মিথ্যা অত্যন্ত দরকারী, এটি ইতিমধ্যে সংযুক্ত কন্টেইনারগুলির জন্য কাজ করে না যার জন্য এটি নির্দিষ্ট করা হয়নি। সমস্যাটি হচ্ছে, সংযুক্তির পরে মনে হয় প্রক্রিয়াটি না মেরে আলাদা করার কোনও উপায় নেই, যার মধ্যে "ডকার সংযুক্তি প্রক্রিয়াটিকে হত্যা করা" সহ। সিপি, সিকিউ সংযুক্ত কন্টেনারগুলির সাথে কাজ করে না, কেবল ইন্টারেক্টিভগুলি (যেমন প্রশ্ন ব্যবহার করে)।
তারানকি

1
এটি @ তরানাকির মন্তব্য সহ, গৃহীত উত্তর হওয়া উচিত, সিটিআরএল + পি, কিউ এর জন্য কাজ করে নাphp:7.3-apache
এমকাআমা

10

আপনি যদি কেবল ধারকটির মধ্যে থেকেই প্রক্রিয়াটির আউটপুট চলতে চান তবে আপনি একটি সহজ করতে পারেন docker container logs -f <container id>

-fসেটির উপরে ফ্ল্যাগ লাগাতে, যাতে ধারক আউটপুট হয় followedএবং রিয়েল টাইমে আপডেট করা হয়েছে। ডিবাগিং বা পর্যবেক্ষণের জন্য খুব দরকারী।


8

আপনি ডিফল্ট + , + সিকোয়েন্স (যা সর্বদা কার্যকর হয় না) ওভাররাইড --detach-keysকরতে দৌড়ানোর সময় আপনি বিকল্পটি ব্যবহার করতে পারেন ।docker attachCTRLPCTRLQ

উদাহরণস্বরূপ, আপনি যখন চালনা করেন docker attach --detach-keys="ctrl-a" testএবং আপনি CTRL+ Aটিপেন তখন আপনি এটিকে হত্যা না করেই ধারকটি থেকে প্রস্থান করবেন।

অন্যান্য উদাহরণ:

  • docker attach --detach-keys="ctrl-a,x" test- টিপুন CTRL+Aএবং তারপরে Xপ্রস্থান করতে
  • docker attach --detach-keys="a,b,c" test- প্রেস A, তারপর B, তারপর Cপ্রস্থান

সরকারী ডকুমেন্টেশন থেকে নিষ্কাশন:

আপনি যদি চান, আপনি আলাদা করার জন্য ডকার কী অনুক্রমকে ওভাররাইড কনফিগার করতে পারেন। আপনি যদি অন্যান্য অ্যাপ্লিকেশনগুলির জন্য ব্যবহার করেন কী ক্রমিকের সাথে ডকার ডিফল্ট সিকোয়েন্সের বিরোধ হয় তবে এটি কার্যকর if প্রতি নিজস্ব ধারক ওভাররাইড বা আপনার সম্পূর্ণ কনফিগারেশনের কনফিগারেশন সম্পত্তি হিসাবে আপনার নিজের বিচ্ছিন্ন কী অনুক্রমকে সংজ্ঞায়িত করার দুটি উপায় রয়েছে।

পৃথক --detach-keys="<sequence>"ধারকটির ক্রমটি ওভাররাইড করতে ডকার সংযুক্তি কমান্ডের সাহায্যে পতাকাটি ব্যবহার করুন । এর বিন্যাসটি <sequence>হ'ল একটি চিঠি [a-Z], বা ctrl-নিম্নলিখিত যে কোনওটির সাথে মিলিত:

  • আজ (একক ছোট ছোট আলফা অক্ষর)
  • @ (সাইন)
  • [(বাম বন্ধনী)
  • \ (দুটি পিছনে স্ল্যাশ)
  • _ (আন্ডারস্কোর)
  • ^ (ক্যারেট)

এই a, ctrl-a, X, অথবা ctrl-\\মান বৈধ কী ক্রম সব উদাহরণ। সমস্ত পাত্রে আলাদা কনফিগারেশন ডিফল্ট কী ক্রম কনফিগার করতে কনফিগারেশন ফাইল বিভাগ দেখুন see

দ্রষ্টব্য: এটি ডকার সংস্করণ 1.10+ থেকে কাজ করে (এই উত্তরের সময়ে, বর্তমান সংস্করণটি 18.03)


0

পুরানো পোস্ট তবে সবেমাত্র প্রস্থান করুন আবার এটি আবার শুরু করুন ... সমস্যাটি হ'ল যদি আপনি উইন্ডোজ মেশিনে থাকেন তবে Ctrl p বা Ctrl P প্রিন্টের সাথে আবদ্ধ থাকে ... প্রারম্ভিক প্রস্থানটি প্রস্থান করলে কোনও ক্ষতি হবে না

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.