আমি ইমেজটি চালনা না করে ডকার চিত্র থেকে একটি ফাইল বের করতে চাই।
docker save
বিকল্প currrently আমার জন্য একটি টেকসই বিকল্প এটা ঠিক আন-আলকাতরা একটি নির্দিষ্ট ফাইল করার জন্য একটি ফাইল খুব বিশাল সংরক্ষণ হচ্ছে যেমন নয়।
আমি ইমেজটি চালনা না করে ডকার চিত্র থেকে একটি ফাইল বের করতে চাই।
docker save
বিকল্প currrently আমার জন্য একটি টেকসই বিকল্প এটা ঠিক আন-আলকাতরা একটি নির্দিষ্ট ফাইল করার জন্য একটি ফাইল খুব বিশাল সংরক্ষণ হচ্ছে যেমন নয়।
উত্তর:
আপনি নিম্নলিখিত কমান্ডগুলির সাহায্যে একটি চিত্র থেকে ফাইলগুলি বের করতে পারেন:
docker create $image # returns container ID
docker cp $container_id:$source_path $destination_path
docker rm $container_id
docker create
ডকুমেন্টেশন অনুসারে, এটি ধারকটি চালায় না:
docker create
কমান্ড নিদিষ্ট চিত্রের উপর একটি লেখার যোগ্য ধারক স্তর তৈরি করে এবং নির্দিষ্ট কমান্ড চালানোর জন্য দেয়ঃ। কনটেইনার আইডি এর পরে মুদ্রিত হয়STDOUT
।docker run -d
কনটেইনারটি আর কখনও শুরু না করা বাদে এটির মতো । তারপরে আপনিdocker start <container_id>
যে কোনও সময়ে ধারকটি শুরু করতে কমান্ডটি ব্যবহার করতে পারেন ।
রেফারেন্সের জন্য (আমার পূর্ববর্তী উত্তর), কোনও চিত্র থেকে একটি ফাইল উত্তোলনের একটি কম কার্যকর উপায় নিম্নলিখিতটি:
docker run some_image cat $file_path > $output_path
docker run --entrypoint /bin/sh my_image -c /bin/cat some_file
উপরের কেউই আমার পক্ষে কাজ করেনি। সম্পূর্ণ কার্যনির্বাহী আদেশটি হ'ল:
docker run --rm --entrypoint /bin/sh image_name -c "cat /path/filename" > output_filename
উদ্ধৃতি cat
ব্যতীত ফাইল নাম ছাড়াই পাস করা হয়, তাই কী প্রদর্শিত হবে তা এটি জানে না। কমান্ড শেষ হওয়ার পরে ধারকটি মুছে ফেলা ভাল ধারণা।
যদি আমার ভুল না হয় তবে আমি বিশ্বাস করি যে ডকার পাত্রে উবুন্টুর জন্য নিম্নলিখিত ডিরেক্টরিতে তৈরি করা ক্যাশেড ফাইলগুলি সংরক্ষণ করা হয়:
/var/lib/docker/aufs/diff/<container_id>
সেখান থেকে আপনার ফাইল সিস্টেমটি অ্যাক্সেস করতে এবং আপনার ফাইলগুলি পুনরুদ্ধার করতে সক্ষম হওয়া উচিত।
layersize
এবং রয়েছে এবং json
এটি ব্যবহারকারী পঠনযোগ্য নয় (এমনকি ব্যবহারকারী ডকার গ্রুপে থাকলেও)। /var/lib/docker/aufs/diff
আমি যে ফাইলটি খুঁজছি তা এতে থাকবে (তবে ধারক আইডির দ্বারা শ্রেণিবদ্ধ করা হয়) এবং এটি পাঠযোগ্যও নয়।
/var/lib/docker/aufs
(তবে সমস্ত ডিরেক্টরি এতে নয় /var/lib/docker/
)
পূর্ণ আউটপুট সংরক্ষণ করা যদি docker save
কোনও বিকল্প না হয় তবে আপনি এটি থেকে প্রয়োজনীয় ফাইলটি বের করতে পাইপলাইনগুলি ব্যবহার করতে পারেন।
দুর্ভাগ্যক্রমে, যেহেতু আউটপুটটি "টার্সের টার", এটি কিছুটা পুনরাবৃত্তি প্রক্রিয়া হতে পারে।
আমি এখনই একটি ফাইল উত্তোলনের প্রয়োজনে যা করেছি তা হ'ল:
1) আপনি সম্প্রতি যে ফাইলটি পরিবর্তন করতে আগ্রহী সেটির কোন সংস্করণটি নির্ধারণ করুন (আপনি কীভাবে এটি সম্ভবত আপনার চিত্রের উপর নির্ভর করে) এবং এটি তৈরি / সংরক্ষণের তারিখটি নির্ধারণ করুন
2) docker save
কমান্ডের আউটপুট থেকে সামগ্রীর সম্পূর্ণ সারণীটি পান :
docker save IMAGE_NAME | tar -tvf -
3) layer.tar
সেই কমান্ডের আউটপুটে ফাইল (গুলি ) সূক্ষ্ম করুন যা আপনার প্রথম ধাপ 1 এ নির্ধারিত চিত্রটির তারিখের সাথে মিলে যায় (আপনি | grep layer.tar
কেবলমাত্র সেই ফাইলগুলি দেখানোর জন্য যোগ করতে পারেন )
4) সেই layer.tar
ফাইলটি স্ট্যান্ডার্ড করে বের করতে, এবং এর সামগ্রীর টেবিলটি পান:
docker save IMAGE_NAME | tar -xf - -O CHECKSUM_FROM_LIST/layer.tar | tar -tvf -
5) তালিকাভুক্ত ফাইলটি যাচাই করুন, এবং নামটি খুঁজে পাওয়ার পরে এটিটি বের করুন:
docker save IMAGE_NAME | tar -xf - -O CHECKSUM_FROM_LIST/layer.tar | tar -xf - PATH/TO/YOUR/FILE
আপনি layer.tar
যদি পদক্ষেপ 2/3 তে সন্ধানের তারিখের সাথে একাধিক ফাইলের সন্ধান করে থাকেন তবে আপনি সঠিক ফাইলটি না পাওয়া পর্যন্ত তাদের প্রতিটির জন্য চার ধাপ পুনরাবৃত্তি করতে হবে may
আপনার ক্ষেত্রে সঠিক চিত্রের নাম, চেকসাম এবং ফাইলের নাম দিয়ে উপরের কমান্ডগুলিতে রাজধানীর পাঠ্যগুলিকে প্রতিস্থাপন করুন।