আপনি ডকারের প্রক্রিয়া থেকে কীভাবে সংযুক্ত এবং বিচ্ছিন্ন হন?


455

আমি একটি ডকার প্রক্রিয়াতে সংযুক্ত করতে পারি তবে Ctrl+ cএটি থেকে আলাদা হওয়ার জন্য কাজ করে না। exitমূলত প্রক্রিয়াটি বন্ধ করে দেয়।

প্রক্রিয়াটি চালিয়ে যাওয়ার জন্য প্রস্তাবিত কর্মপ্রবাহটি কী, মাঝে মাঝে কিছু পরিবর্তন করার জন্য এটি সংযুক্ত করে, এবং তারপরে আলাদা করা হচ্ছে?


4
ন্যানস্টার ব্যবহার করার সময়, আমি কেবল Ctrl-D আউট করি।
ব্যবহারকারী2105103

বন্ধ করে xterm, konsoleইত্যাদি কাজ করে? এটি আমার পক্ষে কাজ করে (আমি বিচ্ছিন্ন হয়ে যাই)।
ভাইটেনিস বিভেইনিস

উত্তর:


665

শেল থেকে প্রস্থান ছাড়া TTY বিচ্ছিন্ন করতে, পালাবার ক্রম ব্যবহার Ctrl+ + Pদ্বারা অনুসরণ Ctrl+ + Q। আরও বিশদ এখানে

এই উত্স থেকে অতিরিক্ত তথ্য :

  • ডকার রান -t-i → এর সাথে আলাদা ^P^Qকরে ডকার সংযুক্তি দিয়ে পুনরায় সংযুক্ত করা যায়
  • ডকার রান -i with এর সাথে আলাদা করা যায় না ^P^Q; স্টাডিনকে ব্যাহত করবে
  • ডকার রান with এর সাথে আলাদা করা যায় না ^P^Q; সিগন্যাল ক্লায়েন্ট করতে পারেন; ডকার সংযুক্তি দিয়ে পুনরায় যোগাযোগ করতে পারেন

46
এটি যদি দস্তাবেজে বর্ণিত হিসাবে কাজ করে তবে এটি দুর্দান্ত উত্তর হবে।
allingeek

20
আমি দেখতে পেয়েছি যে -আইটি দিয়ে চলার সময়ও, আপনি যদি ক্লিনআপ পতাকা (--rm) দিয়ে ধারকটি শুরু করেন তবে বিচ্ছিন্ন ক্রমটি ব্যর্থ হয়। এটি কারও কাছে সুস্পষ্ট হতে পারে তবে আমি স্বীকার করতে চাইলে এটি আমাকে প্রায়শই কামড়ায়।
allingeek

7
অন্য বিকল্পটি হ'ল কেবলমাত্র আপনার টার্মিনাল উইন্ডো বা
সেমিডি

3
আপনি "detachKeys": "ctrl-a,a"আপনার। ডকার / কনফিগারেশন.জসন ফাইলে বা --detach-keys "ctrl-a,a"সংযুক্তি সহ কমান্ড লাইনে কনফিগারযোগ্য ডিটাচ কীগুলি সেট করতে পারেন
ম্যাথু হ্যানিগান

4
Ctrl + Zবিচ্ছিন্ন করে না; এটি কেবল প্রক্রিয়াটির ব্যাকগ্রাউন্ড করে। এটি ডিটচিংয়ের মতো নয় এবং পারফরম্যান্স পেনাল্টি বহন করে।
জেনেক্সার

177

এছাড়াও চেক আউট বিকল্প :--sig-proxy

docker attach --sig-proxy=false 304f5db405ec

তারপরে বিচ্ছিন্ন করতে CTRL+ ব্যবহার করুনc


4
এটি সংযুক্তির পরিবর্তে রান দিয়ে শুরু করার চেষ্টা করার জন্য, আমি চেষ্টা করেছি: docker run -ti --sig-proxy=false busybox top যা কাজ করে না বলে মনে হচ্ছে, প্রক্রিয়াটি সিটিআরএল-সি দিয়ে হত্যা করা হয়েছে তবে এটি দিয়ে শুরু হচ্ছে docker run -t -sig-proxy=false busybox top করে কাজ করবে বলে মনে হচ্ছে এবং সিআরটিএল-সি দিয়ে ছাড়তে সক্ষম হয়েছে
হেনিং

Ctrl-c ধারকটিও বন্ধ করে দেবে।
ইভান হু

এখানে তালিকাভুক্ত ব্যক্তিদের মধ্যে এটিই একমাত্র সমাধান যা ডিবিয়ান ১৯.০ সার্ভারে ডকার ১৯.০৩.৫ চালাচ্ছে আমার জন্য কাজ করে। প্রশ্ন হল, কেন এটি সংযুক্তি আদেশের জন্য ডিফল্ট সেটিংস নয়? এটি সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে বলে মনে হয়।
fviktor

Ctrl-p, Ctrl-q সিকোয়েন্সটি আমার পক্ষে কাজ করে না (ডকারের ধারক সংযুক্তি xyz হিসাবে শুরু হয়েছে) .. তবে এটি করে। ধন্যবাদ @czerasz
প্রভিয়ানন্দস

92

আপনি যদি কেবল ফাইলগুলিতে কিছু পরিবর্তন করতে চান বা প্রক্রিয়াগুলি পরীক্ষা করতে চান তবে এখানে সম্ভবত অন্য একটি সমাধান আপনি চান।

বিদ্যমান ধারক থেকে একটি নতুন প্রক্রিয়া চালানোর জন্য আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:

sudo docker exec -ti [CONTAINER-ID] bash

ব্যাশ শেল সঙ্গে একটি নতুন প্রক্রিয়া শুরু হবে, এবং আপনি তা থেকে অব্যাহতি পারে Ctrl+ Cসরাসরি, এটা মূল প্রক্রিয়া প্রভাবিত করবে না।


6
এটি কাজ করে, আপনি মূল প্রক্রিয়াটিকে প্রভাবিত না করে একবার "প্রস্থান" টাইপ করতে পারেন।
Eko3alpha

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

"সংযুক্তি" এর ডকারের সাথে একটি নির্দিষ্ট অর্থ রয়েছে, এবং execতা নয় is
frnhr

48

আমি মনে করি এটি পরিস্থিতির উপর নির্ভর করে। উদাহরণস্বরূপ নিম্নলিখিত পাত্রে নিন:

# docker run -it -d ubuntu
91262536f7c9a3060641448120bda7af5ca812b0beb8f3c9fe72811a61db07fc
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
91262536f7c9        ubuntu              "/bin/bash"         5 seconds ago       Up 4 seconds                            serene_goldstine

(1) docker attachধারকটি সংযুক্ত করতে " " ব্যবহার করুন :

যেহেতু " docker attach" নতুন টিটিটি বরাদ্দ করবে না , তবে আসল চলমান tty পুনরায় ব্যবহার করবে, সুতরাং আপনি যদি exitকমান্ড চালনা করেন, এটি চলমান ধারকটি প্রস্থান করার কারণ হবে:

# docker attach 91262536f7c9
exit
exit
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
91262536f7c9        ubuntu              "/bin/bash"         39 minutes ago      Exited (0) 3 seconds ago                       serene_goldstine

যদি না আপনি কি সত্যিই ধারক প্রস্থান চলমান করতে চান, আপনি ব্যবহার করা উচিত তাই Ctrl+ + p+ + Ctrl+ + q

(২) " docker exec" ব্যবহার করুন

যেহেতু " docker exec" হবে একটি নতুন tty বরাদ্দ, তাই আমি মনে করি আপনি ব্যবহার করা উচিত exitপরিবর্তে Ctrl+ + p+ + Ctrl+ + q

নিম্নলিখিত নির্বাহ করা হয় Ctrl+ + p+ + Ctrl+ + qধারক প্রস্থান করার জন্য:

# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18160  1908 ?        Ss+  04:03   0:00 /bin/bash
root        15  0.0  0.0  18164  1892 ?        Ss   04:03   0:00 bash
root        28  0.0  0.0  15564  1148 ?        R+   04:03   0:00 ps -aux
root@91262536f7c9:/# echo $$
15

তারপরে আবার লগইন করুন, আপনি দেখতে পাবেন যে bashআক্রমণাত্মক docker execকমান্ডে প্রক্রিয়াটি এখনও জীবিত রয়েছে (পিআইডি 15):

# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18160  1908 ?        Ss+  04:03   0:00 /bin/bash
root        15  0.0  0.0  18164  1892 ?        Ss+  04:03   0:00 bash
root        29  0.0  0.0  18164  1888 ?        Ss   04:04   0:00 bash
root        42  0.0  0.0  15564  1148 ?        R+   04:04   0:00 ps -aux
root@91262536f7c9:/# echo $$
29

39

চলমান ধারক থেকে বিচ্ছিন্ন করতে, ব্যবহার করুন ^P^Q(ধরে রাখুন Ctrl, টিপুন P, টিপুন Q, ছেড়ে দিন Ctrl)।

একটি ধরা হল: এই মাত্র কাজ করে ধারক প্রকাশ করা শুরু হয়েছিল উভয় -t এবং -i

আপনার যদি কোনও চলমান ধারক থাকে যা এই বিকল্পগুলির একটি (বা উভয়) ছাড়াই শুরু হয়েছিল এবং আপনি এতে সংযুক্ত হন docker attach, আপনাকে আলাদা করার জন্য অন্য কোনও উপায় খুঁজে বের করতে হবে। আপনি যে বিকল্পগুলি বেছে নিয়েছেন এবং যে প্রোগ্রাম চলছে তা নির্ভর করে ^Cকাজ করতে পারে বা এটি পুরো ধারকটিকে হত্যা করতে পারে। আপনাকে পরীক্ষা করতে হবে।

আরেকটি ক্যাচ: আপনি যে প্রোগ্রামগুলি ব্যবহার করছেন তার উপর নির্ভর করে আপনার টার্মিনাল, শেল, এসএসএইচ ক্লায়েন্ট বা মাল্টিপ্লেক্সার হয় ^Pবা ^Q(সাধারণত আধুনিক) পরে বাধা দিতে পারে । এটি ইস্যু কিনা তা পরীক্ষা করার জন্য, --detach-keys zযুক্তি দিয়ে চালানো বা সংযুক্ত করার চেষ্টা করুন । আপনার এখন zকোনও পরিবর্তনকারী ছাড়াই টিপে আলাদা করতে সক্ষম হওয়া উচিত । এটি যদি কাজ করে তবে অন্য একটি প্রোগ্রাম হস্তক্ষেপ করছে। এটিকে ঘিরে কাজ করার সহজ উপায় হ'ল আর্গুমেন্টটি ব্যবহার করে আপনার নিজের বিচ্ছিন্নতা ক্রম সেট করা--detach-keys । (উদাহরণস্বরূপ, সাথে প্রস্থান করতে ^K, ব্যবহার করুন --detach-keys 'ctrl-k')) বিকল্পভাবে, আপনি আপনার টার্মিনাল বা অন্যান্য হস্তক্ষেপকারী প্রোগ্রামের কীগুলি বাধা নিষ্ক্রিয় করার চেষ্টা করতে পারেন। উদাহরণস্বরূপ, stty start ''বা stty start undefটার্মিনালটিকে বাধা দেওয়া থেকে বিরত করতে পারে^Q কিছু পসিক্স সিস্টেমে যদিও আমি এটি সহায়ক বলে মনে করি নি।


2
দুর্দান্ত নির্ভুল ব্যাখ্যা,
কবজির

27

যখন অন্য কিছুই কাজ করে না, তখন একটি নতুন টার্মিনাল খুলুন :

$ ps aux | grep attach
username  <pid_here>    ..............  0:00 docker attach <CONTAINER_HASH_HERE>
username  <another_pid> ..............  0:00 grep --color=auto attach
$ kill -9 <pid_here>

কী ফাঁদ! আপনাকে ধন্যবাদ, এটিই কেবল কাজ করেছিল। -9প্রয়োজনীয় ছিল না।
রাফারি 26'19

এটি ধারকটিকেও হত্যা করে - সম্ভবত নির্ভর করে কোনটি পতাকা সেট করা হয়েছিল।
আদমাল

1
দয়া করে মনে রাখবেন যদি সেখানে দুটি পিড প্রদর্শিত হয় তবে প্রথমটি হ'ল পিতা বা মাতা। আপনার দ্বিতীয় পিডটি মারতে হবে docker attachএবং এর পিতামাতাকে ব্যবহার করা উচিত নয়।
জোয়েটউইল

11

ধারক থেকে বিচ্ছিন্ন করতে আপনি কেবল ধরে রাখুন Ctrlএবং P+ টিপুন Q

চলমান ধারকটিতে সংযুক্ত করতে আপনি ব্যবহার:

$ docker container attach "container_name"

9

আমার একই সমস্যা ছিল ctrl- Pএবং আমি Qকাজ করব না, না ctrl- C... অবশেষে আমি আরেকটি টার্মিনাল অধিবেশন খুললাম এবং আমি "ডকার স্টপ কন্টেইনারাইড " এবং "ডকার স্টার্ট কনটেইনারাইড " করেছি এবং এটি কাজটি সেরে ফেলেছে । রহস্যময়।


আপনি --rmপতাকা দিয়ে ধারক শুরু করলে এটি কাজ করবে না । Ctrl+Pএবং Ctrl+Qআপনি -itপতাকা দিয়ে ধারক শুরু করলে কাজ করে ।
অ্যাসওয়থ কে

4

একই শেলের মধ্যে রাখা ctrlকী এবং কীগুলি টেপে pতারপরq


3
এটি কেবল তখনই কার্যকর হয় যদি আপনি -itপতাকা সহ ধারকটি শুরু করেন ।
অ্যাসওয়থ কে



0

কোনও ডকার প্রক্রিয়া বন্ধ করতে এবং বন্দরগুলি ছেড়ে দিতে , প্রথমে ব্যবহার করুন ctrl- cপ্রস্থানটি প্রস্থানকারী থেকে বেরিয়ে যাওয়ার পরে চলমান পাত্রে তালিকার জন্য ডকার পিএস ব্যবহার করুন। তারপরে আপনি সেই প্রক্রিয়াটি বন্ধ করতে এবং এর বন্দরগুলি প্রকাশ করতে ডকার ধারক স্টপ ব্যবহার করতে পারেন। ধারক নামটি আপনি ডকার PS কমান্ড থেকে সন্ধান করতে পারেন যা নাম কলামে নাম দেয়। আশা করি এটি আপনার প্রশ্নের সমাধান করে ....


0

যদি আপনি কেবল পটভূমিতে যেতে পারেন তবে আপনি ব্যবহার করতে পারেন ডকার প্রক্রিয়া

Ctrl + + Z

সচেতন থাকুন যে এটি আসল বিচ্ছিন্নতা নয় এবং এটি একটি পারফরম্যান্স পেনাল্টি নিয়ে আসে। (আপনি bgকমান্ডটি দিয়ে এটি অগ্রভাগে ফিরতে পারেন )।

অন্য বিকল্পটি হ'ল কেবলমাত্র আপনার টার্মিনালটি বন্ধ করা, যদি আপনার আর এটির প্রয়োজন না হয়।


0

আমি একই সমস্যার মধ্যে যে কেউ ছুটে এসেছিল তাদের জন্য (ডিটেচ কীটি সেট করার পরেও, ধারকটি হত্যা না করে আলাদা করতে পারি না) ......

আপনার পাত্রে দিয়ে শুরু করার সময় docker-compose up -d

docker attach {container name}টেলিং লগটি ব্যবহার করার পরিবর্তে ....

চেষ্টা করুন docker-compose logs -f {service name} ctrl- cআপনার ধারকটি না মেরে লগ লেজকে হত্যা করে

{service name} আপনার ডকার-কমপোজ.আইএমএল ফাইলের পাশে তালিকাভুক্ত পরিষেবা হচ্ছে .. (যেমন, ধারকটির নাম = এলক_লগস্ট্যাশ_1 -> পরিষেবার নাম = লগস্ট্যাশ

আছে HTH


0

হালনাগাদ

সমস্যা সমাধানের ধারকগুলির জন্য, STDOUT কী প্রদর্শন করছে তা দেখতে আমি সাধারণত ডকার সংযুক্তি ব্যবহার করি। আমি মাত্র পেলামdocker logs --follow 621a4334f97b , যা কন্টেইনার অপারেশনকে প্রভাবিত না করে এটি বন্ধ করে দিয়ে সিটিআরএল + সি সক্ষম করতে সক্ষম হয়ে আমাকে STDOUT দেখতে দেয়! ঠিক আমি যা চেয়েছিলাম সবসময়।

... স্বাভাবিকভাবেই আপনাকে নিজের কন্টেইনার আইডিতে বিকল্পের প্রয়োজন হবে।

আসল উত্তর

আমি ধারকটি চালিয়ে যেতে চাইছিলাম, তবে ধারকটি শুরু না করেই সংযুক্ত করেছিলাম -it। পরিবর্তে আমার সমাধানটি ছিল আমার এসএসএইচ সংযোগের পরিবর্তে (যেহেতু আমি পাত্রগুলি চালাচ্ছিলাম এমন মেশিনে এসএসএইচড ছিলাম)। এই ssh অধিবেশন হত্যাটি ধারকটি অক্ষত রেখেছিল তবে আমাকে তা থেকে বিচ্ছিন্ন করে।

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