ডকার - কোনও হোস্ট ইউএসবি বা সিরিয়াল ডিভাইসে অ্যাক্সেস দেওয়ার উপায়?


উত্তর:


194

বিকল্প দুটি আছে। আপনি ব্যবহার করতে পারেন --deviceফ্ল্যাগ থাকে, এটি ব্যবহার না করেই অ্যাক্সেস USB ডিভাইসের ব্যবহার করতে পারেন --privilegedমোড:

docker run -t -i --device=/dev/ttyUSB0 ubuntu bash

অথবা, আপনার USB ডিভাইস অভিমানী কাজ ড্রাইভার, মধ্যে হোস্ট ইত্যাদি পাওয়া যায় /dev/bus/usb, আপনি ধারক ব্যবহার করে এই মাউন্ট করতে তৈরী মোড এবং ভলিউম বিকল্প । উদাহরণ স্বরূপ:

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash

মনে রাখবেন যে নামটি বোঝা যাচ্ছে, --privilegedএটি নিরাপত্তাহীন এবং যত্ন সহকারে পরিচালনা করা উচিত should


4
-V প্রয়োজন নেই - সুবিধাপ্রাপ্তর অর্থ ইতিমধ্যে সমস্ত ডিভাইসে অ্যাক্সেস রয়েছে
আর্ট

12
উইন্ডোজ ডকার ক্লায়েন্টের জন্য কি এর মতো কোনও ব্যবস্থা আছে?
পাস্কাল

এই সমাধানটি ব্যবহার করে আমি কোনও ডকারের ধারক থেকে ডিভাইসগুলি দেখতে পাচ্ছি না ... এখানে আমার সমস্যার বিশদ বিবরণ স্ট্যাকওভারফ্লো . com / জিজ্ঞাসা / 3737২২38১২২ রয়েছে। কোন সাহায্যের প্রশংসা! ধন্যবাদ।
কাশেন্দ্র

1
ডকার ইতিমধ্যে চলার পরে যদি ইউএসবি ডিভাইস সংযুক্ত থাকে তবে এখনও কাজ করে না।
ফ্র্যাংকলিন ডাটটইন

মানে, lsusb তালিকাভুক্ত করতে সক্ষম হওয়া সত্ত্বেও এটি ডিভাইসটিকে / tty / USBX এর অধীনে মানচিত্র দেয় না।
ফ্র্যাংকলিন ডাটটইন

78

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

উদাহরণস্বরূপ, আপনি যদি /dev/ttyUSB0নিজের ডকারের ধারক মধ্যে কেবল অ্যাক্সেসযোগ্য করতে চান তবে আপনি এরকম কিছু করতে পারেন:

docker run -t -i --device=/dev/ttyUSB0 ubuntu bash

3
কেবলমাত্র লক্ষ করুন যে এই মুহুর্তে ডিভাইসটি একটি সিমিলিংক হতে পারে না। github.com/docker/docker/issues/13840
wligtenberg

6
--deviceপতাকাটি ব্যবহার করে , আমি কীভাবে এটি নির্ধারণ করব যে /dev/<device>হোস্ট মেশিনে সম্পর্কিত অ্যান্ড্রয়েড ডিভাইসটি বিশেষত উইন্ডোজ বা ম্যাকের জন্য ডকার কুইকস্টার্ট টার্মিনাল (ভার্চুয়ালবক্স হোস্ট) ব্যবহার করার সময়?
ড্যানটিক্স

1
আপনার ডিভাইসের নাম কখনই পরিবর্তন না হয় এটি ভাল কাজ করে। তবে আপনি যদি গতিশীল কিছু ব্যবহার করছেন যা / dev / bus / usb এর মধ্যে ডিভাইস ব্যবহার করে তবে এটি কাজ করবে না কারণ আপনি যখন প্লাগ এবং আনপ্লাগ করেন তখন ডিভাইসের নাম পরিবর্তন হয়। পরিবর্তে আপনার উপরের -v (ভলিউম) সমাধানের প্রয়োজন হবে।
ব্র্যাড গ্রিসম

1
@ ড্যানক্যাট ইউদেব বিধিগুলি নিশ্চিত করতে পারে যে আপনার ডিভাইস স্থির পথে চলবে
সি রিড

1
কেন কেউ কেবলমাত্র একটি ইউএসবি ডিভাইসে অ্যাক্সেস করতে আগ্রহী হবে ?? ইউএসবি ডিভাইসগুলি সংযুক্ত হওয়া qnd সংযোগ বিচ্ছিন্ন হওয়া বোঝায় এবং এটি অ্যাপস রানটাইম চলাকালীন করা দরকার। ইউএসবিটি সটা বা কিছু নয়, আপনি সর্বদা কিছু থাকার জন্য আশা করতে পারবেন না ... এবং আমি মনে করি না যে লোকেরা কেবলমাত্র একক রান জন্য ডকারের মাধ্যমে অ্যাপ্লিকেশন শুরু করে এবং ইউএসবি ডিভাইস সংযোগ বিচ্ছিন্ন হওয়ার সাথে সাথে এগুলি ছেড়ে দেয়, তাই না? আমি সার্ভিস টাইপ অ্যাপ্লিকেশনগুলির মতো আরও কল্পনা করতাম, একক চালের জারগুলি না ... তবে ধন্যবাদ, সত্যিই এটি এমন কিছুকে সহায়তা করতে পারে যার জন্য খুব সীমিত দৃশ্যের জন্য উপযুক্ত হবে
আর্টুরাস এম

17

--deviceআপনার ইউএসবি ডিভাইসটি প্লাগ করা / পুনরায় প্লাগ না করা পর্যন্ত কাজ করে এবং তারপরে এটি কাজ বন্ধ করে দেয়। আপনাকে সিগ্রুপ ডিভাইসগুলি ব্যবহার করতে হবে allow এটিকে ঘিরে ধরুন
আপনি কেবল ব্যবহার করতে পারেন -v /dev:/devতবে এটি অনিরাপদ কারণ এটি আপনার হোস্ট থেকে সমস্ত ডিভাইসকে পাত্রে ম্যাপ করে, কাঁচা ডিস্ক ডিভাইস সহ আরও কিছু। মূলত এটি কনটেইনারটি হোস্টের মধ্যে রুট পেতে দেয়, যা সাধারণত আপনি চান না।
Cgroups পদ্ধতির ব্যবহার সেই ক্ষেত্রে আরও ভাল এবং ডিভাইসগুলিতে কাজ করে যা কনটেইনারটি শুরু হওয়ার পরে যুক্ত হয়।

বিস্তারিত এখানে দেখুন: প্রাইভিলাইজড ব্যবহার না করে ডকারে ইউএসবি ডিভাইসগুলি অ্যাক্সেস করা

এটি পেস্ট করা কিছুটা শক্ত, তবে সংক্ষেপে আপনার চরিত্রের ডিভাইসের জন্য আপনাকে প্রধান সংখ্যাটি সংগ্রহ করতে হবে এবং এটি সিগ্রুপে প্রেরণ করতে হবে:

189 হল / dev / ttyUSB * এর প্রধান সংখ্যা, যা আপনি 'ls -l' দিয়ে পেতে পারেন। এটি আমার সিস্টেমে আমার চেয়ে আলাদা হতে পারে:

root@server:~# echo 'c 189:* rwm' > /sys/fs/cgroup/devices/docker/$A*/devices.allow  
(A contains the docker containerID)

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

docker run -v /dev/bus:/dev/bus:ro -v /dev/serial:/dev/serial:ro -i -t --entrypoint /bin/bash debian:amd64

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


7
যাঁরা এই -1 করেছেন তাদের উদ্দেশ্যে, দয়া করে সহায়তা করুন এবং আপনাকে কী উন্নতি করতে চান তা বলুন। আমরা এই পৃষ্ঠাটি লিখেছিলাম অন্যকে যারা আমাদের সমস্যাটি ঘটাচ্ছে তাদের সহায়তা করার জন্য। আমি কিছুটা সত্যই বলে দেব যে আমাকে আবার ভাগ করে নেওয়ার চেষ্টা এবং লোকদের স্ট্যাকওভারফ্লোতে সহায়তা করার চেষ্টা থেকেও বিরত হচ্ছে: - /
মার্ক মার্লিন

আপনি যদি আমার উত্তরটি পড়েন, আপনি দেখতে পাবেন যে '-v / dev: / dev' ভলিউম যুক্ত করলে গতিযুক্ত প্লাগড ডিভাইসগুলিতে অ্যাক্সেস পাওয়া যাবে।
rrpilot

5
rrpilot: -v / dev: / dev আপনাকে / dev / sda এবং অন্যান্য জিনিসগুলি যা আপনি সত্যিই ধারকটিতে কোনও রুট ব্যবহারকারীর কাছে প্রকাশ করতে চান না সেগুলি সহ সমস্ত কিছু দেয় dev অন্য কথায়, আপনার সমাধান কাজ করে তবে এটি অনিরাপদ। আমার সমস্যাটি প্রায় হয়ে যায়। আমি আমার উত্তরটি এটিকে নির্দেশ করতে সম্পাদনা করব।
মার্ক মার্লিন

1
উত্তরটি কীভাবে প্রধান নম্বর পাবে এবং 189কীভাবে প্রতিস্থাপন করা উচিত তা স্পষ্ট করে আরও ভাল করা যায়। কী পাঠাতে devices.allowহবে তার একটি বিবরণ এখানে পাওয়া যাবে: kernel.org/doc/Docamentation/cgroup-v1/devices.txt
ক্রেগ

1
ডকারের একটি নতুন-ইশ বৈশিষ্ট্য রয়েছে যা এটিকে কিছুটা সহজ করে তোলে: "
ডিভাইস-

14

আমি ইতিমধ্যে প্রদত্ত উত্তরগুলি প্রসারিত করতে চেয়েছিলাম /dev/bus/usbযা গতিযুক্ত সংযুক্ত ডিভাইসগুলির সাথে সমর্থনযুক্ত নয় এবং বুট 2 ডকার ভিএম সহ উইন্ডোজ হোস্ট ব্যবহার করার সময় কীভাবে এই কাজ করা যায় include

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

host:~$ docker-machine stop default

ভার্চুয়ালবক্স ম্যানেজারটি খুলুন এবং প্রয়োজনীয় ফিল্টারগুলির সাথে ইউএসবি সমর্থন যুক্ত করুন।

বুট 2 ডকার ভিএম শুরু করুন:

host:~$ docker-machine start default

যেহেতু ইউএসবি ডিভাইসগুলি বুট 2 ডকার ভিএম-এর সাথে সংযুক্ত রয়েছে তাই কমান্ডগুলি সেই মেশিন থেকে চালানো দরকার। ভিএম দিয়ে একটি টার্মিনাল খুলুন এবং ডকার রান কমান্ডটি চালান:

host:~$ docker-machine ssh
docker@default:~$ docker run -it --privileged ubuntu bash

দ্রষ্টব্য, কমান্ডটি এভাবে চালিত হলে কেবল পূর্ববর্তী সংযুক্ত USB ডিভাইসগুলি ক্যাপচার করা হবে। আপনি যদি ধারকটি শুরু করার পরে সংযুক্ত ডিভাইসের সাথে এটি কাজ করতে চান তবে কেবলমাত্র ভলিউম ফ্ল্যাগের প্রয়োজন। সেক্ষেত্রে, আপনি ব্যবহার করতে পারেন:

docker@default:~$ docker run -it --privileged -v /dev:/dev ubuntu bash

দ্রষ্টব্য, কিছু ক্ষেত্রে এর মতো ডিভাইস ক্যাপচার করার /devপরিবর্তে আমাকে ব্যবহার /dev/bus/usbকরতে হয়েছিল /dev/sg2। আমি কেবল ধরে নিতে পারি যেমন /dev/ttyACM0বা এর মতো ডিভাইসের ক্ষেত্রেও এটি সত্য /dev/ttyUSB0

ডকার রান কমান্ডগুলি লিনাক্স হোস্টের সাথেও কাজ করবে।


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

এবং আপনার হোস্ট মেশিনটির সুরক্ষা এবং বিচ্ছিন্নতার বিষয়েও আপস করে।
এক্সাদ্রা 37

@ Exadra37 এটি করে ... এবং এটি যদি আপনার অ্যাপ্লিকেশনটিতে গুরুত্বপূর্ণ হয় তবে আপনার এটি ব্যবহার করা উচিত নয়। তবে এটি উল্লেখ করা গুরুত্বপূর্ণ যে এখানে কিছু অ্যাপ্লিকেশন রয়েছে যেখানে আপনি পাত্তা দিচ্ছেন না এবং এর বিচ্ছিন্নতার জন্য ডকার ব্যবহার করছেন না। আমার নির্দিষ্ট ক্ষেত্রে, আপনি উইন্ডোতে একটি প্যাকেজযুক্ত লিনাক্স অ্যাপ্লিকেশন চালনা করতে পারেন।
rpilot

3

আরেকটি বিকল্প হ'ল ইউদেব সামঞ্জস্য করা, যা ডিভাইসগুলি কীভাবে মাউন্ট করা হয় এবং কী কী সুবিধা সহ নিয়ন্ত্রণ করে। সিরিয়াল ডিভাইসে অ-রুট অ্যাক্সেসের অনুমতি দেওয়ার জন্য দরকারী Use আপনার যদি স্থায়ীভাবে সংযুক্ত ডিভাইস থাকে, তবে --deviceবিকল্পটি সর্বোত্তম উপায়। যদি আপনার সাময়িক ডিভাইস থাকে তবে আমি যা ব্যবহার করছি তা এখানে:

1. উদেব বিধি সেট করুন

ডিফল্টরূপে, সিরিয়াল ডিভাইসগুলি মাউন্ট করা হয় যাতে কেবল রুট ব্যবহারকারীরা ডিভাইসটি অ্যাক্সেস করতে পারে। অ-রুট ব্যবহারকারীদের দ্বারা সেগুলি পাঠযোগ্য।

/Etc/udev/rules.d/99-serial.rules নামে একটি ফাইল তৈরি করুন। নিম্নলিখিত ফাইলটি এই ফাইলটিতে যুক্ত করুন:

KERNEL=="ttyUSB[0-9]*",MODE="0666"

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

2. হোস্ট থেকে ধারক পর্যন্ত মাউন্ট ইন / ডেভ ফোল্ডার

সিরিয়াল ডিভাইসগুলি প্রায়শই ক্ষণস্থায়ী হয় (যে কোনও সময় প্লাগ করা এবং প্লাগ লাগানো যেতে পারে)। এ কারণে, আমরা সরাসরি ডিভাইস বা এমনকি / dev / সিরিয়াল ফোল্ডারে মাউন্ট করতে পারি না, কারণ জিনিসগুলি প্লাগযুক্ত না করা হলে সেগুলি অদৃশ্য হয়ে যায়। এমনকি যদি আপনি এগুলি আবার প্লাগ ইন করেন এবং ডিভাইসটি আবার প্রদর্শিত হয়, এটি প্রযুক্তিগতভাবে যা মাউন্ট করা হয়েছিল তার চেয়ে আলাদা একটি ফাইল, তাই ডকার এটি দেখতে পাবেন না। এই কারণে, আমরা হোস্ট থেকে পাত্রে পুরো / dev ফোল্ডারটি মাউন্ট করি। আপনি আপনার ডকার রান কমান্ডে নিম্নলিখিত ভলিউম কমান্ডটি যুক্ত করে এটি করতে পারেন:

-v /dev:/dev

যদি আপনার ডিভাইস স্থায়ীভাবে সংযুক্ত থাকে, তবে - ডিভাইস বিকল্প বা আরও নির্দিষ্ট ভলিউম মাউন্ট ব্যবহার করা সম্ভবত সুরক্ষা দৃষ্টিকোণ থেকে আরও ভাল বিকল্প।

3. সুবিধাপ্রাপ্ত মোডে ধারক চালান

আপনি যদি - ডিভাইস বিকল্পটি ব্যবহার না করে এবং পুরো / ডেভ ফোল্ডারে মাউন্ট করেন তবে আপনার কনটেইনারটি চালিত করতে হবে সুবিধাজনক মোডে (আমি উপরে বর্ণিত সিগ্রুপের জিনিসগুলি পরীক্ষা করতে যাচ্ছি এটি দেখার জন্য) )। আপনি আপনার ডকার রান কমান্ডটিতে নিম্নলিখিতটি যুক্ত করে এটি করতে পারেন:

--privileged

4. / dev / সিরিয়াল / বাই-আইডি ফোল্ডার থেকে ডিভাইস অ্যাক্সেস করুন

যদি আপনার ডিভাইসটি প্লাগ এবং প্লাগ লাগানো যায় তবে লিনাক্স গ্যারান্টি দেয় না যে এটি সর্বদা একই টিটিএসবিএক্সএক্সএক্সএক্সএক্স অবস্থিত হবে (বিশেষত যদি আপনার একাধিক ডিভাইস থাকে)। ভাগ্যক্রমে, লিনাক্স / dev / সিরিয়াল / বাই-আইডি ফোল্ডারে ডিভাইসে স্বয়ংক্রিয়ভাবে একটি সিমিলিংক তৈরি করবে। এই ফোল্ডারটির ফাইলটি সর্বদা একই নামে থাকবে।

এটি দ্রুত রুনডাউন, আমার একটি ব্লগ নিবন্ধ রয়েছে যা আরও বিশদে যায়।


2

আমাদের পক্ষে নির্দিষ্ট ইউএসবি ডিভাইসটিকে একটি নির্দিষ্ট ডক পাত্রে আবদ্ধ করা কঠিন যা এটি নির্দিষ্ট। আপনি দেখতে পাচ্ছেন, অর্জনের প্রস্তাবিত উপায় হ'ল:

docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash

এটি সমস্ত ধারককে এই ধারকটিতে আবদ্ধ করবে। এটি অনিরাপদ। প্রত্যেকটি পাত্রে তাদের সমস্ত চালনার জন্য মঞ্জুরি দেওয়া হয়েছিল।

অন্য উপায় হ'ল দেবপথ দ্বারা ডিভাইসগুলি বাঁধাই। দেখে মনে হচ্ছে:

docker run -t -i --privileged -v /dev/bus/usb/001/002:/dev/bus/usb/001/002 ubuntu bash

বা --device(আরও ভাল, না privileged):

docker run -t -i --device /dev/bus/usb/001/002 ubuntu bash

অনেক বেশি নিরাপদ। তবে আসলে কোনও নির্দিষ্ট ডিভাইসের ডেপথ কী তা জানা শক্ত।

এই সমস্যাটি সমাধান করার জন্য আমি এই রেপো লিখেছি।

https://github.com/williamfzc/usb2container

এই সার্ভারটি স্থাপন করার পরে, আপনি সহজেই এইচটিটিপি অনুরোধের মাধ্যমে সংযুক্ত ডিভাইসের সমস্ত তথ্য পেতে পারেন:

curl 127.0.0.1:9410/api/device

এবং পেতে:

{
    "/devices/pci0000:00/0000:00:14.0/usb1/1-13": {
        "ACTION": "add",
        "DEVPATH": "/devices/pci0000:00/0000:00:14.0/usb1/1-13",
        "DEVTYPE": "usb_device",
        "DRIVER": "usb",
        "ID_BUS": "usb",
        "ID_FOR_SEAT": "xxxxx",
        "ID_MODEL": "xxxxx",
        "ID_MODEL_ID": "xxxxx",
        "ID_PATH": "xxxxx",
        "ID_PATH_TAG": "xxxxx",
        "ID_REVISION": "xxxxx",
        "ID_SERIAL": "xxxxx",
        "ID_SERIAL_SHORT": "xxxxx",
        "ID_USB_INTERFACES": "xxxxx",
        "ID_VENDOR": "xxxxx",
        "ID_VENDOR_ENC": "xxxxx",
        "ID_VENDOR_FROM_DATABASE": "",
        "ID_VENDOR_ID": "xxxxx",
        "INTERFACE": "",
        "MAJOR": "189",
        "MINOR": "119",
        "MODALIAS": "",
        "PRODUCT": "xxxxx",
        "SEQNUM": "xxxxx",
        "SUBSYSTEM": "usb",
        "TAGS": "",
        "TYPE": "0/0/0",
        "USEC_INITIALIZED": "xxxxx",
        "adb_user": "",
        "_empty": false,
        "DEVNAME": "/dev/bus/usb/001/120",
        "BUSNUM": "001",
        "DEVNUM": "120",
        "ID_MODEL_ENC": "xxxxx"
    },
    ...
}

এবং এগুলি আপনার পাত্রে আবদ্ধ করুন। উদাহরণস্বরূপ, আপনি এই ডিভাইসের DEVNAME দেখতে পারেন /dev/bus/usb/001/120:

docker run -t -i --device /dev/bus/usb/001/120 ubuntu bash

সম্ভবত এটি সাহায্য করবে।


0

ডকারের সর্বশেষ সংস্করণ সহ, এটি যথেষ্ট:

docker run -ti --privileged ubuntu bash

এটি সমস্ত সিস্টেম সংস্থানগুলিতে অ্যাক্সেস দেবে (উদাহরণস্বরূপ / dev)


2
হ্যাঁ, এটি কার্যকর হলেও সুরক্ষার জন্য ব্যক্তিগতভাবে ব্যবহার করা ভয়াবহ বিকল্প priv
মার্ক মার্লিন

2
যদি আরডুইনো সম্পর্কিত স্টাফের মতো প্রোগ্রামিং স্টাফের জন্য ব্যবহার করা হয় তবে এই সমাধানটি ভাল
জোসে ক্যাবেরা জুনিগা

0

উপরের উত্তরে যুক্ত করা হচ্ছে, যারা ডকারের অভ্যন্তরে কাজ করে এবং ব্যক্তিগতকৃত মোড ব্যবহার না করে একটি বাহ্যিক ইউএসবি ডিভাইস (এইচডিডি, ফ্ল্যাশ ড্রাইভ) ব্যবহার করার দ্রুত উপায় চান তাদের জন্য :

হোস্টটিতে আপনার ডিভাইসে ডেপথটি সন্ধান করুন:

sudo fdisk -l

তালিকা থেকে আপনি খুব সহজেই নিজের ড্রাইভটিকে দক্ষতার সাথে চিনতে পারবেন। এই পাথটি অনুলিপি করুন (নিম্নলিখিত উদাহরণের জন্য এটি /dev/sda2)।

Disque /dev/sda2 : 554,5 Go, 57151488 octets, 111624 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

এই দেবপথটি মাউন্ট করুন (তার চেয়ে ভাল /media):

sudo mount <drive path> /media/<mount folder name>

তারপরে আপনি এটিকে docker runপছন্দ হিসাবে পরম হিসাবে ব্যবহার করতে পারেন:

docker run -it -v /media/<mount folder name>:/media/<mount folder name>

বা ভলিউমের অধীনে ডকার রচনাতে:

services:
  whatevermyserviceis:
    volumes:
      - /media/<mount folder name>:/media/<mount folder name>

এবং এখন যখন আপনি চালাবেন এবং আপনার ধারক প্রবেশ করবেন তখন আপনার ধারকটির ভিতরে ড্রাইভ অ্যাক্সেস করতে সক্ষম হওয়া উচিত /media/<mount folder name>

দাবিপরিত্যাগ:

  1. এটি সম্ভবত ওয়েবক্যাম ইত্যাদির মতো সিরিয়াল ডিভাইসের জন্য কাজ করবে না আমি কেবল এটি ইউএসবি স্টোরেজ ড্রাইভের জন্য পরীক্ষা করেছি।
  2. আপনার যদি নিয়মিতভাবে ডিভাইসগুলি পুনরায় সংযোগ স্থাপন এবং সংযোগ বিচ্ছিন্ন করতে হয়, তবে এই পদ্ধতিটি বিরক্তিকর হবে এবং আপনি যদি মাউন্ট পাথটি পুনরায় সেট না করে এবং ধারকটি পুনরায় চালু না করেন তবে কাজ করবে না।
  3. হিসাবে নির্ধারিত আমি 17.06 + + Docker ব্যবহৃত ডক্স

0

আপনি যদি ইউএসবি ডিভাইসগুলিকে অ্যাক্সেস করতে চান যা ডক ধারক ইতিমধ্যে চলমান অবস্থায় প্লাগ ইন করা যেতে পারে, উদাহরণস্বরূপ / dev / video0 এ কেবল সংযুক্ত ইউএসবি ওয়েবক্যাম অ্যাক্সেস করুন, আপনি ধারকটি শুরু করার সময় একটি সিগ্রুপ বিধি যুক্ত করতে পারেন। এই বিকল্পটির কোনও - বেসরকারী ধারক প্রয়োজন হয় না এবং কেবলমাত্র নির্দিষ্ট ধরণের হার্ডওয়্যার অ্যাক্সেসের অনুমতি দেয়।

ধাপ 1

আপনি যে ধরণের ডিভাইস যুক্ত করতে চান তার প্রধান সংখ্যাটি ডিভাইসটি পরীক্ষা করুন। আপনি এটি লিনাক্স কার্নেল ডকুমেন্টেশনে সন্ধান করতে পারেন । অথবা আপনি এটি আপনার ডিভাইসের জন্য পরীক্ষা করতে পারেন। উদাহরণস্বরূপ / dev / video0 এর সাথে সংযুক্ত ওয়েবক্যামের জন্য ডিভাইসটির প্রধান নম্বরটি পরীক্ষা করতে, আপনি এটি করতে পারেন ls -la /dev/video0। এর ফলস্বরূপ এমন কিছু ঘটে:

crw-rw----+ 1 root video 81, 0 Jul  6 10:22 /dev/video0

যেখানে প্রথম সংখ্যা (81) হল ডিভাইসের প্রধান সংখ্যা number কিছু সাধারণ ডিভাইস প্রধান সংখ্যা:

  • 81: ইউএসবি ওয়েবক্যাম
  • 188: সিরিয়াল রূপান্তরকারীগুলিতে ইউএসবি

ধাপ ২

আপনি ডকারের ধারক শুরু করার সময় বিধিগুলি যুক্ত করুন:

  • যুক্ত কর একটি --device-cgroup-rule='c major_number:* rmw'আপনি যে ধরণের ডিভাইসে অ্যাক্সেস করতে চান তার জন্য বিধি যুক্ত
  • ইউদেব তথ্যে অ্যাক্সেস যুক্ত করুন যাতে ডকারের পাত্রে আপনার ইউএসবি ডিভাইসগুলির সাথে আরও তথ্য পেতে পারে -v /run/udev:/run/udev:ro
  • আপনার ডকারের ধারকটির সাথে / ডিভ ভলিউমটি মানচিত্র করুন -v /dev:/dev

শেষ করি

সুতরাং আপনার ডকার পাত্রে সমস্ত ইউএসবি ওয়েবক্যাম এবং সিরিয়াল 2 ইউএসবি ডিভাইস যুক্ত করতে, করুন:

docker run -it -v /dev:/dev --device-cgroup-rule='c 188:* rmw' --device-cgroup-rule='c 81:* rmw' ubuntu bash
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.