ডকার পাত্রে ভিতরে একটি প্রতীকী লিঙ্ক সহ হোস্ট ডিরেক্টরিটি মাউন্ট করুন


105

আমি এই প্যারামিটারটি দিয়ে ধারকটি মাউন্ট করেছি:

-ভি / হোম / টেস্ট /: / হোম / টেস্ট

হোস্টে / হোম / পরীক্ষার অভ্যন্তরে একটি / mnt / ফোল্ডারটিকে নির্দেশ করে একটি প্রতীকী লিঙ্ক রয়েছে।

তবে সেই লিঙ্কটি যেখানে দেখা যাচ্ছে সেখানে দেখা যায়, ধারকটির ভিতরে এটি ভেঙে গেছে:

root@f93f72b45013:/var/www/html# cd /home/test/ 
root@f93f72b45013:/home/test# ls -lrt 
total 11956 
lrwxrwxrwx. 1 root root 40 Jul 20 15:55 file -> /mnt/mountedfile/
root@f93f72b45013:/home/test# ls -lrt file/*
ls: cannot access file/*: No such file or directory

এমনকি ডকারে করা কি সম্ভব? এটি করার কোনও উপায় আছে কিনা তা আমি নিশ্চিত নই।

আমি জানি আমি যেখানে সরাসরি প্রতীকী লিঙ্কটি দেখিয়েছি সেখানে সরাসরি মাউন্ট করতে পারি তবে আমি ভাবছিলাম যে এটি কিসিবি কিনা?


আমি একটি /mntশেষ পয়েন্টে ম্যাপিংয়ের বিষয়ে শুনেছি , যা হোস্ট-নির্দিষ্ট হতে পারে - আপনি যদি পারেন তবে এটি সবচেয়ে বেশি নিরাপদ হবে avoid
এলডিজি

উত্তর:


144

সিমলিংকগুলি ডকারের ভিতরে একটি বড় চ্যালেঞ্জ। আপনার ক্ষেত্রে আপনি উভয় ডিরেক্টরি মাউন্ট করতে পারেন:

-v /home/test/:/home/test -v /mnt/mountedfile:/mnt/mountedfile

ধারকটির ভিতরে এবং বাইরে উভয়ই প্রতীকী লিঙ্কগুলিতে কাজ করার জন্য, তাদের পরম পথ হতে হবে এবং ঠিক একই নাম ব্যবহার করতে হবে।

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


আমার যদি উইন্ডোতে প্রতীকী লিঙ্ক তৈরি হয় তবে কী করবেন। পাথটি সি হতে পারে: \ (একটি ড্রাইভ লেটার, সেমিকোলন এবং একটি ব্যাকস্ল্যাশ সহ)?
ইটান

4
আপনি যখন ডকারের সাথে কাজ করতে চান তখন @ ইটেনগুলি ছেড়ে যান এবং লিনাক্স / ইউনিক্স সিস্টেমগুলি আলিঙ্গন করুন
নম জি ভি ইউ

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

লারাভেল স্টোরেজ সিমলিংকটি কাজ করার চেষ্টা করে এটি নিয়ে একটি পুরো দিন সংগ্রাম করেছে। docker-composeকনফিগারেশন জন্য এই মত হবে। volumes: [./:/var/www, ./public/storage:/var/www/public/storage]। এখানে, public/storageএকটি syMLink হয় ./storage/app/public। সমাধানের জন্য আপনাকে ধন্যবাদ!
জানু ইওয়ানো

19

একটি সমাধান হ'ল ডকারকে আসল ফাইলটি মাউন্ট করা, তবে readlink -fকোনটি ফাইলের আসল অবস্থানটি মুদ্রণ করে তা ব্যবহার করুন । এইভাবে, আপনি এখনও আপনার কমান্ডের সিএমলিংকের অবস্থানটি উল্লেখ করতে পারেন, যেমন

docker run -it -v $(readlink -f /home/test/):/home/test/ ...


কাজ করছে না - ফলস্বরূপ একই অনুপস্থিত symlinks
অমি মাহলুফ

MacOS অন: perl -MCwd -le 'print Cwd::abs_path(shift)' "$path"(থেকে stackoverflow.com/questions/7665/... )
akauppi

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