ইতিমধ্যে একটি নতুন টিটিওয়াইয়ের সাথে চলমান কোনও ডকার পাত্রে কীভাবে প্রবেশ করবেন


545

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

চলমান ধারকটির সাথে অন্য টিটিটি সংযুক্ত করা কি সম্ভব? সম্ভবত, আমি ডোকারটি কেবলমাত্র এলএক্সসি পাত্রে আবৃত হয়ে পড়েছি সেটার সুবিধাটি নিতে পারি? আমি চেষ্টা করেছি sudo lxc-console -n [container-id] -t [1-4]তবে দেখা যাচ্ছে যে কেবল একটি টিটি উপলব্ধ করা হয়েছে এবং এটি হ'ল অ্যাপাচি ডিমন চালাচ্ছে। বিল্ড চলাকালীন সম্ভবত একাধিক lxc কনসোল সক্ষম করার কোনও উপায় আছে?

আমি যদি সম্ভব হয় তবে একটি ওপেনশ পরিষেবা দিয়ে কনটেইনারটি কনফিগার না করে তৈরি করব।


7
আপনি চেষ্টা করেছেন docker attach [conainer-id]?
shabbychef

13
@ শ্যাববিচেফ যদি না ডকার সংযুক্তি পরিবর্তিত হয়, সংযুক্তি কমান্ডটি চলমান টিটির সাথে সংযুক্ত থাকে, কোনও নতুন নয়, সুতরাং প্রশ্নের শিরোনাম "... নতুন টিটিওয়াই সহ" রয়েছে। এই কারণে নীচের উত্তর সংযুক্তি আদেশটি ব্যবহার করে না।
প্রোগ্রামার 17

উত্তর:


1060

ডকার ১.৩ সহ একটি নতুন কমান্ড রয়েছে docker exec। এটি আপনাকে একটি চলমান ডকারে প্রবেশ করতে দেয়:

docker exec -it [container-id] bash

30
আমি এটিকে সঠিক উত্তর হিসাবে পরিবর্তন করেছি (আমার নিজের থেকে) কারণ এই নতুন পদ্ধতিটি, যা প্রশ্নের সময় ছিল না, এটি বর্তমানের সেরা পদ্ধতি আইএমও।
প্রোগ্রামার

3
তবে লক্ষ্য করুন যে এটি execএকটি সাধারণ টার্মিনাল হিসাবে কাজ করে না। উদাহরণস্বরূপ আপনি ধারকটির ভিতরে একবার ব্যবহারকারীর পরিবর্তন করতে পারবেন না।
পিথিকোস

3
@ পিথিকোস: আমি শেল চালাতে এবং তারপরে su someuserব্যবহারকারী পরিবর্তন করতে এক্সিকিউটি ব্যবহার করতে সক্ষম ।
দোকার

2
এই আলোচনা পড়ার জন্য যে কেউ নোট। আমি নিশ্চিত docker exec -itঅবশেষে একটি সম্পূর্ণ-কার্যকরী সিউডো টিটি সরবরাহ করব তবে এখনকার জন্য (ডকার সংস্করণ ১.৯.১), কিছু ত্রুটি রয়েছে: github.com/docker/docker/issues/8755
blong

18
যদি আপনি ত্রুটিটি পেয়ে যান 'এক্সিকিউট: "বাশ": এক্সিকিউটেবল ফাইলটি $ PATH' তে পাওয়া যায় না তবে আপনি এটি ব্যবহার করে দেখতে পারেন:
ডাইকার এক্সিকিউট -আইট

42

এসএসএইচ ব্যবহার না করে কোনও পাত্রে প্রবেশের জন্য আপনার জেরেম পেটাজোনির সরঞ্জামটি 'নেসেন্টার' বলা উচিত। দেখুন: https://github.com/jpetazzo/nsenter

কেবল চলমান সহ ইনস্টল করুন: docker run -v /usr/local/bin:/target jpetazzo/nsenter

তারপরে ধারকটি docker-enter <container-id>প্রবেশ করতে কমান্ডটি ব্যবহার করুন ।


এটি সঠিক উপায়। ব্লগ দেখুন ।
জেসি গ্লিক 15

5
ডকার ১.৩ সহ একটি নতুন কমান্ড রয়েছে docker exec। এই আপনি একটি চলমান Docker লিখতে পারবেন docker exec -it <container-id> bash(নীচের আমার উত্তর দেখুন)
Michael_Scharf

5
docker-enterএখনও আছে কি ? এটা আমাকে দেয় command not found
স্নো ক্র্যাশ

22

হালনাগাদ

ডকার ০.৯ হিসাবে, এখন নীচের পদক্ষেপগুলি কাজ করার জন্য, ডেমন পুনরায় আরম্ভ করার আগে একটিকে এখন ডকার ডেমন স্টার্টআপ বিকল্পটিতে /etc/default/dockerফাইল আপডেট করতে হবে '-e lxc'(আমি হোস্টটিকে রিবুট করে এটি করেছি)।

/ ইত্যাদি / ডিফল্ট / ডকার ফাইল আপডেট করুন

এই সব কারণ ...

... এটি [ডকার 0.9] এ একটি নতুন "ইঞ্জিন ড্রাইভার" বিমূর্ততা রয়েছে যাতে ধারকগুলি শুরু করতে LXC ব্যতীত অন্য API এর ব্যবহার সম্ভব হয়। এটি একটি নতুন এপিআই লাইব্রেরির (লাইবকন্টেইনার) ভিত্তিতে একটি নতুন ইঞ্জিন ড্রাইভার সরবরাহ করে যা LXC সরঞ্জামগুলি ব্যবহার না করে নিয়ন্ত্রণ গ্রুপগুলি পরিচালনা করতে সক্ষম। মূল সমস্যাটি হ'ল যদি আপনি আপনার ধারকটিতে ক্রিয়া সম্পাদন করতে lxc- সংযুক্তির উপর নির্ভর করেন তবে ধারকটির অভ্যন্তরে একটি শেল শুরু করার মতো, যা বিকাশের পরিবেশের জন্য অত্যন্ত কার্যকর useful

সূত্র

দয়া করে নোট করুন যে এটি নতুন হোস্টটি কেবলমাত্র ডকারের 0.11 নেটওয়ার্কিংয়ের optionচ্ছিক বৈশিষ্ট্যটিকে "কাজ করা" থেকে বাধা দেবে এবং আপনি কেবল লুপব্যাক ইন্টারফেসটি দেখতে পাবেন। বাগ রিপোর্ট


দেখা যাচ্ছে যে একটি ভিন্ন প্রশ্নের সমাধানও এটির সমাধান ছিল:

... আপনি ps -notruncসম্পূর্ণ এলএক্সসি কনটেইনার আইডি পেতে ডকার ব্যবহার করতে পারেন এবং তারপরে lxc-attach -n <container_id>রুট হিসাবে সেই ধারকটিতে রান ব্যাশ ব্যবহার করতে পারেন ।

আপডেট: আপনাকে শীঘ্রই ব্যবহার ps --no-truncকরা দরকার ps -notruncযার পরিবর্তে হ্রাস করা হচ্ছে।

এখানে চিত্র বর্ণনা লিখুন সম্পূর্ণ ধারক আইডি সন্ধান করুন

এখানে চিত্র বর্ণনা লিখুন Lxc সংযুক্তি কমান্ড প্রবেশ করান।

এখানে চিত্র বর্ণনা লিখুন শীর্ষগুলি আমার অ্যাপাচি প্রক্রিয়াটি দেখায় যে ডকার শুরু হয়েছিল।


সুতরাং, ঠিক ডকার দিয়ে এটি করার কোনও উপায় নেই, তাই না? আমি ব্যক্তিগতভাবে নিজেকে এলএক্সসিতে না মিশতে পছন্দ করি।
qkrijger

ব্যাশ চালু করার পরিবর্তে lxc- সংযুক্ত কমান্ড চালানোর কোনও উপায় আছে কি? ধন্যবাদ!!
জোসেলো

@qkrijger যতদূর আমি সচেতন যে সঠিক। "মিশ্রিত" এলএক্সসি নিয়ে কেন চিন্তিত? আপনি বুঝতে পেরেছেন যে ডকারটি এলএক্সসির উপরে নির্মিত?
প্রোগ্রামার

@ জোসেলো আমি আপনার প্রশ্নটি বুঝতে পারি না, তবে আমি আপনাকে আরও বিস্তারিতভাবে একটি নতুন পোস্ট তৈরি করার পরামর্শ দিচ্ছি? ডকার প্রক্রিয়া শুরু করার অনেকগুলি উপায় রয়েছে, যেমন বাশ দিয়ে বা -d ইত্যাদি দিয়ে ডেমন হিসাবে
প্রোগ্রামার

@ প্রোগ্রামার হ্যাঁ, আমি বুঝতে পেরেছি :) তবুও, ডকারের সাথে সরাসরি মিলিতভাবে এলএক্সসি ব্যবহার করা হ্যাকিংয়ের মতো অনুভব করে। মজা, কিন্তু সত্যই রক্ষণাবেক্ষণযোগ্য নয়। সাধারণভাবে, যে বিমূর্ত স্তরটি কাজ করতে বেছে নিয়েছিল
সেটিকে কোড করা উচিত you

7

প্রথম ধাপে ধারক আইডি পান:

docker ps

এটি আপনাকে এরকম কিছু দেখাবে

কন্টেইনার আইডি ইমেজ কম্যান্ড তৈরি স্ট্যাটাস পোর্টস নাম

1170fe9e9460 লোকালহোস্ট: 5000 / পাইথন: env-7e847468c4d73a0f35e9c5164046ad88 "./run_notebook.sh" 26 সেকেন্ড আগে 25 সেকেন্ড 0.0.0.0.0:8989->9999/tcp SLURM_TASK-303337_0

1170fe9e9460 এই ক্ষেত্রে ধারক আইডি হয়।

দ্বিতীয়ত , ডকারটি প্রবেশ করুন:

docker exec -it [container_id] bash

উপরের ক্ষেত্রে তাই: docker exec -it 1170fe9e9460 bash


5

ধারক মধ্যে tmux / GNU স্ক্রিন চলমান সম্পর্কে কি? কোনও সরল মাধ্যমে আপনি যতটা ভিটিটি চান তার অ্যাক্সেসের সহজ উপায় বলে মনে হচ্ছে:

$ docker attach {container id}

এটি একটি ঠিক সমাধান যদি আপনি জানেন যে আপনি কোনও ধারকটিতে অ্যাক্সেস পেতে চাইবেন (উদাহরণস্বরূপ এটি ডিবাগ করা) তবে এটি ওপিকে সহায়তা করবে না যে বলে যে তারা কোনও বিদ্যমান ধারককে ঘিরে দেখতে চায়।
লুকা স্পিলার 10

1
এই উত্তরটির সাথে আমার সমস্যাটি হ'ল লোকেরা ইতিমধ্যে ব্যবহার সম্পর্কে জিজ্ঞাসা করেছে docker attachএবং আমি এটি উল্লেখ করেছি:...the attach command attaches to the running tty, not a new one, hence the question title is "...with new TTY"
প্রোগ্রামার

ঠিক আছে, যদি ধারকটি ইতিমধ্যে এই সমাধানটি চালাচ্ছে তবে আপনাকে সাহায্য করবে না তবে আপনি যদি পূর্বে কোনও মাল্টিপ্লেক্সার চালানোর বিষয়ে যত্ন নেন তবে আপনাকে অতিরিক্ত টিটিএস লাগবে না ... বাস্তবে যেহেতু আমি টিএমউক্স ব্যবহার শুরু করেছি আমি একটি টিটিএস ব্যবহার করি এবং একবারে আমার প্রয়োজন মতো সমস্ত কিছু করার পরে একবার টিএমউক্সে প্রবেশ করার পরে আমি যতটা ভিটিজি চাই তা করতে পারি।
সিগ 0

4

nsenterএটা করে তবে আমি একটি সাধারণ উপায়ে একটি ধারক প্রবেশ করা প্রয়োজন এবং nsenter আমার প্রয়োজনের জন্য যথেষ্ট না। এটি কয়েকটি অনুষ্ঠানে বগি ছিল (কালো পর্দা প্লাস-ওয়েলড ফ্ল্যাগ কাজ করছে না)। তদতিরিক্ত আমি একটি নির্দিষ্ট ব্যবহারকারী হিসাবে এবং একটি নির্দিষ্ট ডিরেক্টরিতে লগইন করতে চেয়েছিলাম।

আমি পাত্রে প্রবেশের জন্য নিজের সরঞ্জামটি তৈরি করে শেষ করেছি। আপনি এটি এখানে পেতে পারেন: https://github.com/Pithikos/docker-enter

এর ব্যবহার যতটা সহজ

./docker-enter [-u <user>] [-d <directory>] <container ID>

খুব চেষ্টা করেছি, খুব দুর্দান্ত! উবুন্টুতে sudo apt-get build-ਜਰੂਰੀ -y gcc ডকার-enter.c-o ডকার-এন্টার সুডো চালাতে হয়েছিল / lxc-Att -n কোডবেস যথেষ্ট সংক্ষিপ্ত যে কোনওটি দূষিত কিছু সন্ধান করার জন্য দ্রুত পুরোটিকে স্ক্যান করতে পারে।
প্রোগ্রামার

আমি অ্যাপল -এমুলেশন / ডকার- এন্ট্রি হিসাবে github.com/steveeJ/personal-portage-overlayভেন্টুতে ইবেলড উপলব্ধ করেছি ।
স্টেফানজুনকার


2

"Nsinit" উপায়টি হ'ল:

nsinit ইনস্টল করুন

git clone git@github.com:dotcloud/docker.git
cd docker
make shell

ধারক ভিতরে থেকে:

go install github.com/dotcloud/docker/pkg/libcontainer/nsinit/nsinit

বাহির থেকে:

docker cp id_docker_container:/go/bin/nsinit /root/

এটা ব্যবহার করো

cd /var/lib/docker/execdriver/native/<container_id>/
nsinit exec bash

2
docker exec -t -i container_name /bin/bash

আপনাকে পাত্রে কনসোলে নিয়ে যাবে।


আমি এই প্রশ্নটিতে অবতরণ করেছি কারণ আমারও একই সমস্যা ছিল। অনুরূপ বলে মনে হচ্ছে উত্তরটি আমার পরিবর্তন হয়নি যতক্ষণ না আমি পরিবর্তন করেছি। যদিও আমি এটি মুছে ফেলতে পারি।
দানস্তান


1

আমি ডেমন হিসাবে চলমান মাইক্রোসফ্ট / আইআইএস চালানোর জন্য পাওয়ারশেল শুরু করেছি

docker exec -it <nameOfContainer> powershell

দেখে মনে হচ্ছে প্রশ্নটি কোনও লিনাক্স-ভিত্তিক ধারক সম্পর্কে। এই উত্তরটি সম্ভবত কেবল তখনই কাজ করবে যদি আপনার উইন্ডোজ ভিত্তিক ধারক থাকে বা যদি আপনার কাছে পাওয়ারশেলের NNET কোর সংস্করণ ইনস্টল থাকে, যেমন পাওয়ারশেল or বা তার পরে।
ম্যানফ্রেড

0

উপর উইন্ডোজ 10 , আমি Docker ইনস্টল করা নেই। আমি একটি পাত্রে জিনকিন্স চালাচ্ছি এবং আমি একই ত্রুটির বার্তাটি পেয়েছি। এই সমস্যাটি সমাধানের জন্য এখানে ধাপে ধাপে গাইড:

ধাপ 1: গিটব্যাশ খুলুন এবং ডকার রান -p 8080: 8080-পি 50000: 50000 জেনকিনগুলি চালান।

ধাপ ২: একটি নতুন টার্মিনাল খুলুন।

ধাপ 3: চলমান ধারকটির তালিকা পেতে "ডকার পিএস" করুন। ধারক আইডি অনুলিপি করুন।

পদক্ষেপ 4: এখন আপনি যদি "ডকার এক্সিকিউটিভ-{কনটেইনার আইডি} sh" বা "ডকার এক্সিকিউটি-এটি {ধারক আইডি} বাশ" করেন তবে আপনি "ইনপুট ডিভাইসটি টিটিওয়াই নয়" এর অনুরূপ একটি ত্রুটি বার্তা পাবেন you আপনি যদি হন পুদিনা ব্যবহার করে, 'উইন্টপি'-র সাথে কমান্ডের উপসর্গ চেষ্টা করুন

পদক্ষেপ 5: রান কমান্ড " $ উইনপটি ডকার এক্সিকিউটিভ - কনটেইনার আইডি} sh "

ভোলা !! আপনি এখন টার্মিনালের ভিতরে আছেন।

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