ডকার কনটেইনার ফাইল সিস্টেমটি এক্সপ্লোর করে


651

আমি ডকার দিয়ে লক্ষ্য করেছি যে একটি ধারকটির ভিতরে কী ঘটছে বা সেখানে কী ফাইল রয়েছে তা আমার বুঝতে হবে। একটি উদাহরণ হ'ল ডকার সূচক থেকে চিত্রগুলি ডাউনলোড করা - আপনার ছবিতে কী আছে তা কোনও ক্লু নেই তাই অ্যাপ্লিকেশনটি শুরু করা অসম্ভব।

যা আদর্শ হবে তা হ'ল তাদের মধ্যে সমতা বা সমতুল্য হওয়া। এটি করার কোনও সরঞ্জাম আছে কি না, বা ডকারের ধারণাটি আমার ভুল করতে ভেবে ভুল করা উচিত যে আমি এটি করতে সক্ষম হব।


13
Docker এর সর্বশেষ সংস্করণে, ভালো কিছু সম্ভব: docker exec <container> bash। সুতরাং, আপনি কেবল ধারকটির ভিতরে একটি শেল খুলুন।
দশোহোকশা

7
কনটেইনারটিতে ব্যাশ চালানো কেবলমাত্র তখনই কাজ করে যদি পাত্রে ভিতরে বাশ ইনস্টল করা হয়
ক্রিস্টোফার থমাস

7
একইভাবে, আপনি করতে পারেন: docker exec <container> ls <dir path>এবং docker exec <container> cat <file path>। বাশের জন্য, -itবিকল্পগুলি যুক্ত করুন।
নোয়াম মানস

অনুরূপ প্রশ্ন: স্ট্যাকওভারফ্লো.
com/

3
@ খ্রিস্টোফার থমাস এর কারণেই আমি খুঁজে পেয়েছি যে এটি করার একমাত্র শক্তিশালী উপায় docker image save image_name > image.tar@ গৌরব ২৪ এর প্রতিক্রিয়া অনুসারে রয়েছে।
যায়েম হাবলুটজেল

উত্তর:


736

হালনাগাদ করা
সহজ পদ্ধতি: ডকার এক্সকে ব্যবহার করে

ডকার সংস্করণ 1.3 বা আরও নতুন কমান্ডটিকে execঅনুরূপ আচরণ করে nsenter। এই কমান্ডটি ইতিমধ্যে চলমান ধারকটিতে নতুন প্রক্রিয়া চালাতে পারে (ধারকটির পিআইডি 1 প্রক্রিয়া ইতিমধ্যে চলমান থাকতে হবে)। আপনি /bin/bashধারক রাষ্ট্র অন্বেষণ চালাতে পারেন :

docker exec -t -i mycontainer /bin/bash

দেখতে Docker কমান্ড লাইন ডকুমেন্টেশন

বিকল্প পদ্ধতি 1
স্ন্যাপশোটিং

আপনি ধারক ফাইল সিস্টেমটি এইভাবে মূল্যায়ন করতে পারেন:

# find ID of your running container:
docker ps

# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot

# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash

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

আপনি পরে স্ন্যাপশটটি মুছতে পারেন (চলমান ধারকটির ফাইল সিস্টেমটি প্রভাবিত হয় না!):

docker rmi mysnapshot

বিকল্প পদ্ধতি 2
এসএসএস

আপনার যদি অবিচ্ছিন্ন অ্যাক্সেসের প্রয়োজন হয় তবে আপনি আপনার ধারকটিতে এসএসডিডি ইনস্টল করতে পারেন এবং এসএসডিডি ডিমন চালাতে পারেন:

 docker run -d -p 22 mysnapshot /usr/sbin/sshd -D

 # you need to find out which port to connect:
 docker ps

এইভাবে, আপনি ssh ব্যবহার করে আপনার অ্যাপটি চালাতে পারেন (যা চান তা সংযুক্ত করুন এবং কার্যকর করুন)।

আপডেট: বিকল্প পদ্ধতি 3
এনসেন্টার

ব্যবহার করুন nsenter, https://web.archive.org/web/20160305150559/http://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/ দেখুন

সংক্ষিপ্ত সংস্করণটি হ'ল: ন্যান্টারের সাহায্যে আপনি একটি বিদ্যমান পাত্রে শেল পেতে পারেন, এমনকি যদি সেই ধারকটি এসএসএইচ বা কোনও ধরণের বিশেষ-উদ্দেশ্যে ডেমন চালায় না if


6
তবে নোট করুন আপনার যদি ফাইলগুলিতে অ্যাক্সেসের প্রয়োজন হয় তবে "ডকার সিপি" কমান্ড ব্যবহার করুন: ডকার সিপি কনটেনার: পাঠ হোস্টপেট কনটেইনার ফাইল সিস্টেম থেকে ফাইল / ফোল্ডারগুলি হোস্ট পাথে অনুলিপি করুন। পাথগুলি ফাইল সিস্টেমের মূলের সাথে সম্পর্কিত। #> ডকার সিপি 7bb0e258aefe: / etc / debian_version। #> ডকার সিপি ব্লু_ফ্রোগ: / ইত্যাদি / হোস্ট।
আমোষ ফোলারিন

4
বিকল্প 4 এত গুরুত্বপূর্ণ যে এটিকে শীর্ষে স্থানান্তরিত করে নতুন নামকরণ করা উচিত Option 1
অটোমোরফিক

5
@ জানুস ট্রেলসন যদি শেল না থাকে তবে আপনি এটি ইনস্টল করতে পারবেন - উদাহরণস্বরূপ আলপাইন লিনাক্সের (যা আসলে শেল নেই) জন্য ডকফায়াইলে লিখেছেন: RUN apk update && apk add bash(আকার: ~ 4 এমবি)
কামিল কিয়েসজেউস্কি 11:58

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

1
উইন্ডোর লিনাক্স শেল ব্যবহার করতেdocker exec -t -i mycontainer /bin/sh
জেসন মাস্টার্স

266

আপডেট: এক্সপ্লোরিং!

এই কমান্ডটি আপনাকে একটি চলমান ডকার পাত্রে অন্বেষণ করতে দেওয়া উচিত :

docker exec -it name-of-container bash

ডকার-রচনায় এর সমতুল্য হ'ল:

docker-compose exec web bash

(ওয়েব এই ক্ষেত্রে পরিষেবাটির নাম এবং এটি ডিফল্টরূপে tty রয়েছে))

একবার আপনি ভিতরে প্রবেশ করুন:

ls -lsa

বা অন্য কোনও বাশ আদেশ যেমন:

cd ..

এই আদেশটি আপনাকে একটি ডকার চিত্র অন্বেষণ করতে দেয় :

docker run --rm -it --entrypoint=/bin/bash name-of-image

একবার ভিতরে কর:

ls -lsa

বা অন্য কোনও বাশ আদেশ যেমন:

cd ..

-itইন্টারেক্টিভ ... এবং TTY জন্য দাঁড়িয়েছে।


এই আদেশটি আপনাকে একটি চলমান ডকার পাত্রে বা চিত্রটি পরীক্ষা করতে দেয় :

docker inspect name-of-container-or-image

আপনি এটি করতে চাইতে পারেন এবং কোনও আছে কিনা তা সন্ধান করতে পারেন bash বাsh সেখানে। জসন রিটার্নে এন্ট্রিপয়েন্ট বা সেন্টিমিটার সন্ধান করুন।

দেখা Docker Exec ডকুমেন্টেশন

দেখা Docker-রচনা Exec ডকুমেন্টেশন

ডকার ডকুমেন্টেশন পরিদর্শন দেখুন


1
এটি অত্যন্ত দরকারী, ধন্যবাদ! আমাকে একটি অ্যাপ্লিকেশনটিতে ডকার ইমেজ ফাইল কাঠামোর ভিতরে থাকা একটি ফাইল টেনে আনতে হবে, তবে এটি জিইউআই ফর্ম্যাটে না খুললে সম্ভব হবে না। কোন ধারণা আমি কীভাবে এটিকে ঘিরে কাজ করতে পারি?
আরক্যা চ্যাটার্জি

2
এটি মোটামুটি সুস্পষ্ট হওয়া উচিত যে এটি কেবলমাত্র একটি ধারক ইনস্টল করা কনটেইনারেই কাজ করবে।
সফটওয়্যার ইঞ্জিনিয়ার

2
উইন্ডোজ কনটেইনার / docker exec -ti <name> powershell
পাওয়ারশেলটিতে

1
@ বিক্রয় আমার কনটেইনার / চিত্রটিতে কোনও কারণে docker exec -ti <name> cmdকাজ করা পাওয়ার পাওয়ার নেই। এবং আমার মতো অন্যান্য docker psনবজাতকের জন্য আপনি যে পাঠ্যযোগ্য নামটি অর্পণ করেছেন তার চেয়ে কনটেইনার উদাহরণের নামটি (070494393ca5 এর মতো কিছু) ব্যবহার করা নিশ্চিত করুন ।
সাইমন_উইভার

1
চিত্রগুলিতে পাওয়ার শেল সম্পর্কিত বিষয়ে github.com/aspnet/aspnet-docker/issues/362 - এবং যদি আপনার কেবল উইন্ডোগুলির চিত্রগুলিতে কার্ল প্রয়োজন হয়: ব্লগস.টেকনেট.মাইক্রোসফট
ভার্চুয়ালাইজেশন

162

যদি আপনার ধারকটি বন্ধ হয়ে যায় বা শেল না থাকে (উদাহরণস্বরূপ ইনস্টলেশন গাইডেhello-world উল্লিখিত , বা অ-alpine traefik ), সম্ভবত ফাইল সিস্টেমটি অন্বেষণের একমাত্র সম্ভাব্য পদ্ধতি এটি।

আপনি আপনার ধারকটির ফাইল সিস্টেমটি টার ফাইলে সংরক্ষণাগারভুক্ত করতে পারেন:

docker export adoring_kowalevski > contents.tar

অথবা ফাইলগুলি তালিকাবদ্ধ করুন:

docker export adoring_kowalevski | tar t

মনে রাখবেন, চিত্রটির উপর নির্ভর করে কিছু সময় এবং ডিস্কের জায়গা লাগতে পারে।


12
আমি কেবলমাত্র একটি ধারকটির সামগ্রীগুলি তালিকাবদ্ধ করতে চেয়েছিলাম যেখানে মানক ইউনিক্স সরঞ্জাম ইনস্টল করা নেই। exportউপরের উদাহরণের একটি ভিন্নতা docker export adoring_kowalevski | tar tf -
স্পটটিকে

3
অজানাদের একটি সতর্কতা: এটি প্রচুর ডেটা রফতানি করতে পারে (> জিবি) এবং একটি দীর্ঘ সময় নিতে পারে।
ভিন্স বোডরেন

5
@ বার্তো যে এটি একটি বিশাল জিনিস নয়, তবে f -আপনার কমান্ডের শেষে আপনার প্রয়োজন হবে না, ডার ডিফল্টরূপে স্ট্যান্ডার্ড ইনপুট থেকে পড়ে। সহজভাবে docker export adoring_kowalevski | tar tকাজ করে।
শান বউকার্ট

আরও সহজতর; দুর্দান্ত, টিপটির জন্য ধন্যবাদ! 🙌🏽
বার্তো

1
@ শনবউকার্ট ডিফল্ট কারওর tar fকনফিগারেশনের উপর নির্ভরশীল। একটি অংশ TAPEপরিবেশ পরিবর্তনশীল। অন্যরা বিল্ডের অংশ হিসাবে নিয়ন্ত্রিত হয়। নেট প্রভাব যে এক এটি সার্চ কখনো অনুমান উচিত stdin বা লিখছে stdout- এ কিন্তু সবসময় স্পষ্টভাবে এটি রাষ্ট্র।
রোয়াইমা

42

ধারকটির ফাইল সিস্টেম ডকারের ডেটা ফোল্ডারে থাকে, সাধারণত / var / lib / ডকারে। একটি চলমান পাত্রে ফাইল সিস্টেম শুরু এবং পরীক্ষা করার জন্য নিম্নলিখিতটি করুন:

hash=$(docker run busybox)
cd /var/lib/docker/aufs/mnt/$hash

এবং এখনকার চলমান ডিরেক্টরিটিই ধারকটির মূল।


3
এটি কোনও মাউন্ট ভলিউম যদিও অন্তর্ভুক্ত করবে না।
hwjp

34

ধারক তৈরির আগে:

আপনি যদি ধারকটির ভিতরে থাকা চিত্রটির কাঠামোটি অন্বেষণ করতে পারেন তবে আপনি এটি করতে পারেন

sudo docker image save image_name > image.tar
tar -xvf image.tar

এটি আপনাকে কোনও চিত্রের সমস্ত স্তর এবং এর কনফিগারেশনের দৃশ্যমানতা দেবে যা জসন ফাইলগুলিতে উপস্থিত রয়েছে।

ধারক তৈরির পরে:

এর জন্য উপরে ইতিমধ্যে উপরে প্রচুর উত্তর রয়েছে। এটি করার জন্য আমার পছন্দের উপায়টি হ'ল -

docker exec -t -i container /bin/bash


এখানে উল্লেখ করা উচিত যে কন্টেইনারের অভ্যন্তরে বাশ চলমান কেবল তখনই কাজ করে যদি আপনি ইমেজটির মতো একই আর্কিটেকচারযুক্ত মেশিনে এটি করেন। আপনি যদি পিসিতে থাকেন তবে রাস্পবেরি পাইয়ের চিত্র ফাইল সিস্টেমে দেখার চেষ্টা করছেন, বাশ ট্রিক কাজ করবে না।
ম্যাক্সিম কুলকিন

@ ম্যাক্সিমকুলিন সত্যিই? কনটেইনারটি যদি লিনাক্স হয় তবে হোস্টটি কী তা বিবেচনাধীন নয়, যদি বাশ পাওয়া যায়। সম্ভবত আপনি উইন্ডোজ পাত্রে চিন্তা করছেন?
থোরবজর্ন রাভন অ্যান্ডারসন

26

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

docker cp <container-name>:<path/inside/container> <path/on/host/>

ডকার সিপিকে ধন্যবাদ ( লিঙ্ক ) আপনি সরাসরি ধারক থেকে অনুলিপি করতে পারেন কারণ এটি আপনার ফাইল সিস্টেমের অন্য কোনও অংশ ছিল। উদাহরণস্বরূপ, একটি ধারকের ভিতরে সমস্ত ফাইল পুনরুদ্ধার করা:

mkdir /tmp/container_temp
docker cp example_container:/ /tmp/container_temp/

মনে রাখবেন যে আপনার পুনরাবৃত্তভাবে অনুলিপি করতে চান তা নির্দিষ্ট করার দরকার নেই।


6
এর কেন আরও +1 নেই! অবশ্যই সেরা উপায়
নিকোলাস ডিপিয়াজা

এটি টারের মাধ্যমে রফতানি করার চেয়েও সহজ। সিমলিংকের মাধ্যমে ফাইলগুলি পেতে আমাকে -L ব্যবহার করতে হয়েছিল। কন্টেইনার চালানোর দরকার নেই!
এমকামা

17

উপর উবুন্টু 14.04 চলমান Docker 1.3.1 , আমি নিম্নলিখিত ডিরেক্টরির মধ্যে হোস্ট মেশিনে ধারক রুট ফাইল সিস্টেম পাওয়া যায়নি:

/var/lib/docker/devicemapper/mnt/<container id>/rootfs/

সম্পূর্ণ ডকার সংস্করণ তথ্য:

Client version: 1.3.1
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): 4e9bbfa
OS/Arch (client): linux/amd64
Server version: 1.3.1
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): 4e9bbfa

কবজির মতো কাজ করে: নাম = <name> ডকারআইডি = $ (ডকার পরিদর্শন -f {{{। আইড}} $ নাম) / ভার / লিব / ডকার / ডিভাইসমেপার / এমএনটি / ock ডকারআইডি / রুটফেস /
ফ্লোরেন্ট

3
উবুন্টু 16.10 এবং ডকার 1.12.1 এর সাথে দুর্ভাগ্যক্রমে এটি আর হয় না (কোনও devicemapperডিরেক্টরি নেই)। ফাইলটি এর অধীনে রয়েছে /var/lib/docker/overlay/<a sha256 apparently/<upper or merged>/...। সেখানে ফাইল অ্যাক্সেস করা কতটা পোর্টেবল / নিরাপদ তা আমি নিশ্চিত নই
WoJ

1
১.১০ থেকে শুরু করে, ডকার একটি নতুন সামগ্রী ঠিকানা ঠিকানাযোগ্য স্টোরেজ মডেল প্রবর্তন করেছে, যা এলোমেলোভাবে উত্পন্ন UID ব্যবহার করে না, যেমন স্তর এবং ধারক শনাক্তকারী উভয়ের জন্যই ছিল। নতুন মডেলে এটি স্তর আইডির জন্য একটি সুরক্ষিত সামগ্রী হ্যাশ দ্বারা প্রতিস্থাপিত হয়েছে। সুতরাং এই পদ্ধতিটি আর কাজ করবে না।
আর্টেম ডলোবাঙ্কো 12

এটি পোর্টেবল নয় এবং স্টোরেজ ড্রাইভারের পছন্দের উপর নির্ভর করে । direct-lvmউদাহরণস্বরূপ সমাধানটি কার্যকর হবে কিনা তা নিশ্চিত নয় ।
rustyx

14

ব্যবহার করার চেষ্টা করুন

docker exec -it <container-name> /bin/bash

বাশ বাস্তবায়িত হয়নি এমন সম্ভাবনা থাকতে পারে। যে জন্য আপনি ব্যবহার করতে পারেন

docker exec -it <container-name> sh

12

আমি আরেকটি নোংরা কৌশল ব্যবহার করি যা হ'ল আফস / ডিভাইসমেপার অগ্নিস্টিক।

আমি কমান্ডটি দেখছি যে ধারকটি চলছে docker ps এবং যেমন এটি যদি অ্যাপাচি হয় বা javaআমি কেবল নিম্নলিখিতটি করি:

sudo -s
cd /proc/$(pgrep java)/root/

এবং voilá আপনি ধারক ভিতরে আছেন।

মূলত আপনি /proc/<PID>/root/যতক্ষণ না সেই প্রক্রিয়াটি ধারক দ্বারা চালিত হয় ততক্ষণ ফোল্ডারে রুট সিডি করতে পারবেন । সাবধানতা অবলম্বনকারী সিডলিংকগুলি সেই মোডটি ব্যবহার করে বোকা বানিয়ে দেবে না।


এই পদ্ধতি সম্পর্কে এখানে অতিরিক্ত তথ্য: superuser.com/a/1288058/195840
এডুয়ার্ডো লুসিও 27'18

12

আপনার ধারকটি প্রকৃত লিনাক্স সিস্টেম না হলে ব্যতীত সবচেয়ে বেশি ভোট দেওয়া উত্তর ভাল।

অনেকগুলি পাত্রে (বিশেষত গো-ভিত্তিকগুলি) কোনও মানক বাইনারি নেই (না /bin/bashবা/bin/sh )। সেক্ষেত্রে আপনার আসল পাত্রে ফাইলটি সরাসরি অ্যাক্সেস করতে হবে:

একটি যাদুমন্ত্র মত কাজ করে:

name=<name>
dockerId=$(docker inspect -f {{.Id}} $name)
mountId=$(cat /var/lib/docker/image/aufs/layerdb/mounts/$dockerId/mount-id)
cd /var/lib/docker/aufs/mnt/$mountId

দ্রষ্টব্য: আপনার এটি রুট হিসাবে চালানো দরকার।


এটি আর কাজ করে না। ডিভাইসম্যাপার ফোল্ডারটি নেই।
0xcaff

পুরানো উত্তরযুক্ত লোকেরা তাদের পরিষ্কার করে দিলে ভাল লাগবে
ম্যাথু পারডন

2
আমি নতুন ডকার স্টোরেজ স্ট্রাকচারের সাথে মেলে কমান্ডটি আপডেট করেছি।
ফ্লোরেন্ট

10

আমার ক্ষেত্রে ধারক ব্যতীত কোনও শেল সমর্থিত ছিল না sh। সুতরাং, এটি একটি কবজ মত কাজ

docker exec -it <container-name> sh


5

এটি চিত্রের জন্য একটি বাশ সেশন শুরু করবে:

ডকার রান --rm -it --entryPoint = / বিন / বাশ


1
এটি যখন ডিফল্ট এন্ট্রিপয়েন্টটি চালিত হয় না তার জন্য দরকারী
পার্সেথিস

4

আমার জন্য, এটি একটি ভাল কাজ করে (ডিরেক্টরিটি / var / lib / ডকার / নির্দেশিত করার জন্য সর্বশেষ মন্তব্যের জন্য ধন্যবাদ ):

chroot /var/lib/docker/containers/2465790aa2c4*/root/

এখানে 2465790aa2c4 হ'ল চলমান ধারকটির শর্ট আইডি ( ডকার পিএস দ্বারা প্রদর্শিত ), তারার পরে।


4

ডকারের নতুন সংস্করণগুলিতে আপনি চালাতে পারেন docker exec [container_name]যা আপনার ধারকটির ভিতরে একটি শেল চালায়

সুতরাং একটি পাত্রে সমস্ত ফাইলের তালিকা পেতে কেবল চালান docker exec [container_name] ls


1
আমি এটি চেষ্টা করেছিলাম এবং এটি কার্যকর হয়নি। খলিল ঘারবাউইয়ের পরামর্শ উপরে কাজ করেছে।
নিক

এটা আমার জন্য কাজ করেছে। আপনি ইমেজের নামের পরিবর্তে ধারক আইডি দিয়েও চেষ্টা করতে পারেন
দিওয়ান

4

ডকার আউফস ড্রাইভারের জন্য:

স্ক্রিপ্টটি ধারক মূল ডিয়ারটি খুঁজে পাবেন (ডকারে 1.7.1 এবং 1.10.3 এ পরীক্ষা করুন)

if [ -z "$1" ] ; then
 echo 'docker-find-root $container_id_or_name '
 exit 1
fi
CID=$(docker inspect   --format {{.Id}} $1)
if [ -n "$CID" ] ; then
    if [ -f  /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id ] ; then
        F1=$(cat /var/lib/docker/image/aufs/layerdb/mounts/$CID/mount-id)
       d1=/var/lib/docker/aufs/mnt/$F1
    fi
    if [ ! -d "$d1" ] ; then
        d1=/var/lib/docker/aufs/diff/$CID
    fi
    echo $d1
fi

4

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

প্রকৃত ম্যানুয়াল পরিদর্শনের জন্য প্রথমে স্তর আইডিগুলি সন্ধান করুন:

docker inspect my-container | jq '.[0].GraphDriver.Data'

আউটপুটে, আপনার মতো কিছু দেখা উচিত

"MergedDir": "/var/lib/docker/overlay2/03e8df748fab9526594cfdd0b6cf9f4b5160197e98fe580df0d36f19830308d9/merged"

ধারক ফাইল সিস্টেমের বর্তমান দৃশ্যমান অবস্থার সন্ধান করতে এই ফোল্ডারে (রুট হিসাবে) নেভিগেট করুন।


3

এই উত্তরটি তাদের (আমার মতো) যারা কনটেইনারটি চালিত না হয়েও ডকার ভলিউম ফাইল সিস্টেমটি অন্বেষণ করতে চান তাদের সহায়তা করবে।

চলমান ডকার পাত্রে তালিকা:

docker ps

=> কনটেনার আইডি "4c721f1985bd"

আপনার স্থানীয় শারীরিক মেশিনে ডকার ভলিউম মাউন্ট পয়েন্টগুলি দেখুন ( https://docs.docker.com/engine/tutorials/dockervolume/ ):

docker inspect -f {{.Mounts}} 4c721f1985bd

=> [{/ টিএমপি / ধারক-গ্যারেন / টিএমপি সত্যিকারের প্রাইভেট}]

এটি আমাকে বলে যে স্থানীয় ফিজিকাল মেশিন ডিরেক্টরি / tmp / ধারক-গ্যারেন ম্যাপ করা হয় / tmp ডকার ভলিউম গন্তব্যে।

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


1
এটি কেবলমাত্র একটি স্থানীয় ডিরেক্টরি খুঁজে পায় যা ধারকটির ভিতরে ভলিউম হিসাবে মাউন্ট করা থাকে তবে ধারকটির পুরো ফাইল সিস্টেমে অ্যাক্সেসের অনুমতি দেয় না।
বোজন কোমাজেক

3

অন্য কৌশলটি হ'ল পারমাণবিক সরঞ্জামটি ব্যবহার করার মতো কিছু:

mkdir -p /path/to/mnt && atomic mount IMAGE /path/to/mnt

এটি পরীক্ষা করার জন্য ডকার চিত্রটি আপনাকে / পথ / থেকে / mnt এ স্থাপন করবে।


তবে এটি কাজ করার জন্য আপনার বিশেষভাবে তৈরি পাত্রে থাকা দরকার, তাই না? হতে পারে আপনার এটিকে একটি সাবধান হিসাবে যুক্ত করা উচিত, কারণ বেশিরভাগ লোক সমাধান হিসাবে তাদের দল / সংস্থায় এটি বিক্রি করতে সক্ষম হবেন না ...
অ্যাঞ্জেলস পিকুলাস

3

শুধুমাত্র লিনাক্সের জন্য

আমি যে সর্বাধিক সহজ উপায়টি ব্যবহার করি তা হ'ল প্রোকার দির ব্যবহার করা যা হ'ল ডকারের ধারক ফাইলগুলি পরীক্ষা করার জন্য এটি অবশ্যই ধারক must

  1. ধারকটির প্রসেস আইডি (পিআইডি) সন্ধান করুন এবং কিছু ভেরিয়েবলের মধ্যে সঞ্চয় করুন

    পিআইডি = $ (ডকার পরিদর্শন -f '{{। স্টেট.পিড}}' আপনার ধারক-নাম-এখানে)

  2. কনটেইনার প্রক্রিয়া চলছে কিনা তা নিশ্চিত করুন এবং কনটেইনার ফোল্ডারে প্রবেশের জন্য চলক নামটি ব্যবহার করুন

    সিডি / প্রোক / $ পিআইডি / মূল

আপনি যদি এই দীর্ঘ কমান্ডটি ব্যবহার করে পিআইডি নম্বরটি সন্ধান না করে দির দিয়ে যেতে চান তবে

cd /proc/$(docker inspect -f '{{.State.Pid}}' your-container-name-here)/root

পরামর্শ:

আপনি ধারকটির ভিতরে Afterোকার পরে, আপনি যা কিছু করেন তা ধারকটির আসল প্রক্রিয়াগুলিকে প্রভাবিত করবে, যেমন পরিষেবা বন্ধ করা বা বন্দর নম্বর পরিবর্তন করা।

আশা করি এটা সাহায্য করবে

বিঃদ্রঃ:

এই পদ্ধতিটি কেবল তখনই কাজ করে যদি কনটেইনারটি চলমান থাকে, অন্যথায় ধারকটি থামানো বা অপসারণ করা হলে ডিরেক্টরিটির আর অস্তিত্ব থাকবে না


2

ধারকটির ভিতরে কী চলছে তা বোঝার আমার পছন্দের উপায়টি হ'ল:

  1. এক্সপোজ -p 8000

    docker run -it -p 8000:8000 image
    
  2. এটির ভিতরে সার্ভার শুরু করুন

    python -m SimpleHTTPServer
    

2

ইতিমধ্যে চলমান ধারকটির জন্য, আপনি এটি করতে পারেন:

dockerId=$(docker inspect -f {{.Id}} [docker_id_or_name])

cd /var/lib/docker/btrfs/subvolumes/$dockerId

সেই দির সিডি করতে আপনাকে রুট হওয়া দরকার। আপনি যদি রুট না হন, কমান্ড চালানোর আগে 'sudo su' চেষ্টা করুন।

সম্পাদনা: V1.3 অনুসরণ করে, জিরির উত্তর দেখুন - এটি আরও ভাল।


4
আমি "sudo -i" এর চেয়ে দৃ strongly়ভাবে আংশিক আছি "sudo su" এর পরিবর্তে কারণ একটি স্যুইড প্রোগ্রাম চালানোর সামান্য কারণ আছে যা শেল প্রবর্তন করে এমন আরও একটি স্যুইড প্রোগ্রাম চালু করে। মধ্যবিত্তকে কেটে দাও। :)
ড্যানিসাউয়ার

আপনার উত্তরটি খুব ভাল, কেবল পথটি নয়। আপনার পিয়ার্সবোটের পথটি ব্যবহার করা উচিত।
ফ্লোরেন্ট

2

আপনি যদি ডকার ভি 19.03 ব্যবহার করে থাকেন তবে আপনি নীচের পদক্ষেপগুলি অনুসরণ করেন।

# find ID of your running container:

  docker ps

# create image (snapshot) from container filesystem

  docker commit 12345678904b5 mysnapshot

# explore this filesystem 

  docker run -t -i mysnapshot /bin/sh

1

আপনি যদি এএফএএস স্টোরেজ ড্রাইভার ব্যবহার করেন তবে আপনি কোনও ডিলার-স্তর স্ক্রিপ্ট ব্যবহার করে কোনও ধারকের ফাইল সিস্টেম রুট (এমএনটি) এবং পঠন রচনার স্তর খুঁজে পেতে পারেন:

# docker-layer musing_wiles
rw layer : /var/lib/docker/aufs/diff/c83338693ff190945b2374dea210974b7213bc0916163cc30e16f6ccf1e4b03f
mnt      : /var/lib/docker/aufs/mnt/c83338693ff190945b2374dea210974b7213bc0916163cc30e16f6ccf1e4b03f

2018-03-28 সম্পাদনা করুন: ডকার-ব্যাকআপ
দ্বারা ডকার- স্তর প্রতিস্থাপন করা হয়েছে


1

docker execকমান্ড একটি চলমান কন্টেইনারে কমান্ড চালানোর জন্য একাধিক মামলায় সাহায্য করতে পারেন।

ব্যবহার: ডকার এক্সিকিউট [অপশন] কন্টেইনার কম্যান্ড [আরজি ...]

একটি চলমান ধারক মধ্যে একটি কমান্ড চালান

বিকল্প:
  -d, --detach বিযুক্ত মোড: পটভূমিতে কমান্ড চালান
      --detach-key স্ট্রিং এ-কে আলাদা করার জন্য কী সিকোয়েন্সটি ওভাররাইড করে
                             আধার
  -e, --env তালিকা পরিবেশের ভেরিয়েবল সেট করুন
  -আই, - ইন্টারেটিভ সংযুক্ত না থাকলেও এসটিডিএন খোলা রাখুন
      --privileged কমান্ডকে প্রসারিত সুবিধা দিন
  -টি, - ছদ্ম-টিটিওয়াই বরাদ্দ করুন
  -u, - ব্যবহারকারীর স্ট্রিং ব্যবহারকারীর নাম বা ইউআইডি (ফর্ম্যাট:
                             [:])
  -w, --workdir স্ট্রিং কনটেইনার ভিতরে ওয়ার্কিং ডিরেক্টরি

উদাহরণ স্বরূপ :

1) চলমান ধারক ফাইল সিস্টেমে ব্যাশে অ্যাক্সেস করা:

docker exec -it containerId bash 

2) প্রয়োজনীয় অধিকার থাকতে সক্ষম হওয়ার জন্য চলমান ধারক ফাইল সিস্টেমে ব্যাশ অ্যাক্সেস করা:

docker exec -it -u root containerId bash  

এটি একটি পাত্রে রুট হিসাবে কিছু প্রক্রিয়াজাতকরণ করতে সক্ষম হতে বিশেষভাবে দরকারী।

3) নির্দিষ্ট ওয়ার্কিং ডিরেক্টরি সহ চলমান ধারক ফাইল সিস্টেমে ব্যাশে অ্যাক্সেস করা:

docker exec -it -w /var/lib containerId bash 

0

আপনি এটির সাহায্যে ধারকটির ভিতরে একটি বাশ চালাতে পারেন: $ docker run -it ubuntu /bin/bash

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