লিনাক্স পাত্রে লুপ ডিভাইস?


14

আমি কিছু চিত্র ফাইল মাউন্ট করার জন্য একটি ধারকের ভিতরে একটি লুপ ডিভাইস ব্যবহার করার চেষ্টা করছি:

> sudo losetup /dev/loop0 test.img
losetup: /dev/loop0: failed to set up loop device: No such file or directory

/dev/loop0 আসলেই নেই, এবং

> sudo mknod /dev/loop0 b 7 0
mknod: ‘/dev/loop0’: Operation not permitted

আমি এই কাজটি কীভাবে করব? ধারকটির এমন কিছু সিগ্রুপ অনুমতি দরকার যা এটি নাও থাকতে পারে?

উত্তর:


17

আপনি যদি সিস্টেমড-এনস্পেন ব্যবহার করছেন তবে --capability=CAP_MKNODকমান্ড লাইন সুইচ দিয়ে আপনার ধারকটি শুরু করুন । এটি আপনাকে আপনার ধারকটির ভিতরে ডিভাইস নোড তৈরি করতে দেয় allow তারপরে এটির মতো একটি লুপ ডিভাইস তৈরি করুন:

# mknod /dev/loop0 b 7 0

মনে রাখবেন যে এই লুপ ডিভাইসটি হোস্টের সাথে ভাগ করা হয়েছে এবং /dev/loop0সেখানেও বলা হয়। এবং যদি আপনি প্রধান এবং অপ্রধান সংখ্যাগুলি জানেন তবে এখন হোস্ট ডিভাইসগুলি অ্যাক্সেস করা সম্ভব। এমন অন্যান্য পরিণতিও হতে পারে যা আমি ভেবে দেখিনি। সতর্কাবস্থা.


কেউ কি --capability=CAP_MKNODএখনও নিশ্চিত যে কাজ করতে পারে? আমার কাছে এটির কোনও প্রভাব নেই বলে মনে হয়, আমি Operation not permittedএটির সাথেও আছি , এবং তাই এই ব্যবহারকারী এবং এই ব্যবহারকারীরও তাই
এনএইচ 2

2
আমি এখন এটা কাজ পেয়েছিলাম, কিন্তু দান ছাড়াও --capability=CAP_MKNODআমি সেট করতে হয়েছে DeviceAllow=block-loop rwmsystemd হল-nspawn ইউনিটে এটি কাজ করা (যে পেয়েছিলাম ধারণা থেকে এখানে )।
nh2

লুপব্যাক ডিভাইসগুলিতে সম্পূর্ণ অ্যাক্সেসের অনুমতি --device-cgroup-rule="b 7:* rmw"দেওয়ার docker runজন্য আমাকে যুক্ত করতে হয়েছিল (তবে অন্য কেউ নেই, যেহেতু কিছুই নেই --privilege)। Docs.docker.com/edge/engine/references/commandline/create/… এর মাধ্যমে পাওয়া গেছে এবং 18.06.1-ce (ডকুমেন্টটি কেবল ডকার এজ প্রযোজ্য বলে দাবী করেছে)
রবএম

9

লুপ ডিভাইসগুলি কার্নেল মডিউল দ্বারা সরবরাহ করা হয়। সুতরাং, এগুলি অ্যাক্সেস করার জন্য আপনার বিশেষ সুবিধাগুলি প্রয়োজন need এগুলি আপনার পাত্রে উন্মুক্ত করা দরকার, অথবা আপনাকে ম্যানুয়ালি ডিভাইস ফাইল তৈরি করতে হবে।

দ্রুত উত্তর

docker run --privileged=true ...

একটি বিকল্প

sudo losetup /dev/loop0 test.img
mount /dev/loop0 /mnt
docker run -v /mnt:/mnt ...

এটি প্রায় কাজ করে

docker run --device=/dev/loop-control:/dev/loop-control --device=/dev/loop0:/dev/loop0 --cap-add SYS_ADMIN ...

তবে আমি এই ত্রুটিটি পেয়েছি:

root@5c033d5f8625:/# sudo mount /dev/loop0 /mnt
mount: block device /dev/loop0 is write-protected, mounting read-only
mount: cannot mount block device /dev/loop0 read-only

আরও তথ্যের জন্য এই লিঙ্কটি দেখুন ।


সিস্টেমড-এনস্প্যান ম্যান পৃষ্ঠায় একটি নোট:

সিস্টেমড-এনএসপাউন কনটেইনারটিতে বিভিন্ন কার্নেল ইন্টারফেসগুলিতে কেবল পঠনযোগ্য / sys, / proc / sys বা / sys / fs / বিক্রয়মুক্তে অ্যাক্সেস সীমাবদ্ধ করে। নেটওয়ার্ক ইন্টারফেস এবং সিস্টেম ঘড়ি ধারক থেকে পরিবর্তন করা যাবে না। ডিভাইস নোড তৈরি করা যেতে পারে না। হোস্ট সিস্টেমটি পুনরায় চালু করা যায় না এবং পাত্রে থেকে কার্নেল মডিউলগুলি লোড করা যায় না।

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