কীভাবে একটি সিমলিঙ্কযুক্ত ফোল্ডারটি একটি সাধারণ ফোল্ডার হিসাবে উপস্থিত হয়


38

আমার দুটি ডার্ট অ্যাপ্লিকেশন রয়েছে যা আমাকে ডকারাইজ করতে হবে। এই দুটি অ্যাপ্লিকেশন একটি ভাগ করা উত্স ডিরেক্টরি ব্যবহার করে।
কারণ Docker প্রতিরোধ প্রসঙ্গ ডিরেক্টরির বাহিরে ফোল্ডার থেকে ফাইল যোগ করার ( project/app1) আমি না ফাইল থেকে যোগ করতে পারেন ../sharedকিংবা থেকে shared(সিমবলিক লিঙ্ক ভিতরে projects/app1)।

আমি ডকারকে যাইহোক এটি করতে কৌশল করার উপায় খুঁজছি।

আমার সরলীকৃত প্রকল্প কাঠামো

- projects
  - app1
   - Dockerfile
   - shared (symlink ../shared)
   - otherSource
  - app2
   - Dockerfile
   - shared (symlink ../shared)
   - otherSource
  - shared
    - source

আমি Dockerfileএক স্তর উপরে যেতে এবং docker buildসেখান থেকে চালাতে পারি তবে তারপরে একই ডিরেক্টরিতে আমার দুটি ডকফায়াইল (অ্যাপ্লিকেশন 1 এবং অ্যাপ 2 এর জন্য) দরকার।

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

অন্য কোন সরঞ্জাম বা কৌশল আছে যে এটি অনুমতি দেয়?

আমি বরং ডিরেক্টরি কাঠামো পরিবর্তন করব না কারণ এটি অন্যান্য সমস্যার কারণ হতে পারে এবং চারপাশে ফাইলগুলি অনুলিপি না করে।

উত্তর:


35

আমার খুব বেশি অভিজ্ঞতা নেই dockerতাই আমি প্রতিশ্রুতি দিতে পারি না এটি কাজ করবে তবে একটি পছন্দ হ'ল ডিরেক্টরিটি লিঙ্ক করার পরিবর্তে মাউন্ট করা:

$ cd projects/app1
$ mkdir shared
$ sudo mount -o bind ../shared shared/

এটি সিস্টেমের সাথে সংযুক্ত ../sharedহবে ./sharedএবং এটি সম্পূর্ণ স্বচ্ছ হতে হবে। হিসাবে ব্যাখ্যা করা হয়েছে man mount:

বাঁধাই মাউন্ট।

লিনাক্স ২.৪.০ থেকে ফাইলের স্তরক্রমের অংশটি অন্য কোথাও পুনঃমাউন্ট করা সম্ভব। কলটি হ'ল:

mount --bind olddir newdir

অথবা এই fstab এন্ট্রি ব্যবহার করে:

/olddir /newdir none bind

এই কল করার পরে একই বিষয়বস্তু দুটি জায়গায় অ্যাক্সেসযোগ্য।


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

2
আমার পক্ষে ডকার ডিমন পুনরায় চালু করা বাধ্যতামূলক ছিল! অন্য মাউন্ট করা দির পাত্রে দৃশ্যমান ছিল না।
অস্পষ্ট

হ্যাঁ! আমি এটিকে
ক্যাপিস্ট্রানোতে

দুর্ভাগ্যক্রমে এটি উইন্ডোজ বা ওএস এক্স ব্যবহারকারীদের জন্য কাজ করবে না। এই বিষয়টি নিয়ে বিতর্কটি ছিল ... সজীব।
জেসন

উত্স নিয়ন্ত্রণ যেমন গিথুবে 'কমিট' করা হচ্ছে? বা আমি প্রতিবার এটি করতে হবে?
পাই 6 কে

23

এই বিষয়টি ডকার সম্প্রদায়ের মধ্যে বারবার উঠে এসেছে। এটি মূলত প্রয়োজন যে একটি লঙ্ঘন Dockerfileপুনরাবৃত্তি হতে যদি আপনি এটি চালানোর অথবা আমি এটি চালানোর জন্য। সুতরাং আমি এই ক্ষমতাটি আশা করব না, যেমনটি এই টিকিটে বর্ণিত হয়েছে: ডকফেরফিল এডিড কমান্ড হোস্ট # 1676 এ সিমলিংকগুলি অনুসরণ করে না

সুতরাং আপনাকে একটি ভিন্ন পদ্ধতির ধারণা করতে হবে। আপনি যদি এই ইস্যুটি দেখুন: # 6094 টি যুক্তিতে প্রতীকগুলি সমর্থন করার জন্য যোগ করুন , ইউএন্ডএল থেকে আমাদের এক বন্ধু ( @ পেট্রিক ওরফে। তদন্তকারী) একটি চতুর কাজটি সরবরাহ করে।

$ tar -czh . | docker build -

এটি tarবর্তমান ডিরেক্টরি থেকে প্রতীকী লিঙ্কগুলি ডিফারেন্স করতে এবং তারপরে সমস্ত docker build -কমান্ডের সাথে পাইপ করতে বলে ।

ট্যান ম্যান পৃষ্ঠা থেকে উদ্ধৃতি
-c, --create
       create a new archive

-h, --dereference
       follow symlinks; archive and dump the files they point to

-z, --gzip, --gunzip --ungzip

3
এটি একটি দুর্দান্ত সমাধান! আমি বুঝতে পারি কেন ডকার দাবি করছেন যে তারা এই বৈশিষ্ট্যটি বাদ দিতে চান। তবে আমার কন্টেইনারাইজ প্রকল্পটি বিকাশ করার সময় আমি যে ওয়ার্কফ্লোটি ব্যবহার করি তার মধ্যে যথেষ্ট পার্থক্য রয়েছে এবং আমি কীভাবে এটি উত্পাদনের জন্য নির্মিত হবে আশা করি। আমার স্থানীয় মেশিনে আমি একটি সুপার টাইট প্রতিক্রিয়া লুপ চাই। আমার অ্যাপ্লিকেশনটিতে 1 গিট রেপো রয়েছে এবং ধারকগুলির জন্য বিল্ড এনভায়রনমেন্টের 2 র্থ রেপো রয়েছে। আমি প্রতিশ্রুতিবদ্ধ বা ধাক্কা দিতে চাই কিনা তা সিদ্ধান্ত নেওয়ার আগে আমার স্থানীয়ভাবে সম্পাদনা করতে এবং পরীক্ষাগুলি তৈরি করতে সক্ষম হতে হবে। আমার চূড়ান্ত প্রকল্পে আমার কাছে সিমলিংক বা এডিডি নির্দেশাবলী থাকবে না।
ব্রুনো ব্রোনোস্কি

6
ডকফায়াইলগুলি পুনরাবৃত্তিযোগ্য নয়। ডকফায়াইলগুলি সম্ভবত পুনরাবৃত্তযোগ্য করা যায় না, কারণ তাদের প্রায় সকলেরই ২ য় বা তৃতীয় স্তরের আপ্ট-গিট বা সমতুল্য কিছু থাকে এবং অ্যাপট-গেট পুনরাবৃত্ত হয় না। অসম্ভবকে সত্য করে তোলার জন্য একটি বিপথগামী প্রয়াসে ডকার বিকাশের কৌশলটি বেঁধে রাখার ফলে ডকারকে কেবল এমন সিরিজ খারাপ বিমূর্ততা দিয়ে কেটে ফেলবে যা কারও সাহায্য না করে। nathanleclaire.com/blog/2014/09/29/…
জেসন

1
ঠিক আছে, সুতরাং আমি কেন সত্যিই দেখতে পাচ্ছি না cpযে এটি কমান্ডের চেয়ে আরও ভাল কেন আপনি কেন এটি আরও ভাল তা ব্যাখ্যা করতে পারেন? আমি আরও মনে করি পাইপটি বিভ্রান্তিকর / অত্যধিক সংশ্লেষিত। কেন শুধু বিল কমান্ডের উপরে টার কমান্ড রাখি না। আমি অনুমান করি কারণ তখন আপনি আসল দির সাথে সিমলিঙ্কড দির ওভাররাইট করে ফেলবেন।
আলেকজান্ডার মিলস 21

1
@ আলেকজান্ডারমিলস - কী ঘটে তা দেখার সেরা উপায় হ'ল চেষ্টা করে দেখার এবং পার্থক্যটি দেখার। উপরেরটি একটি ধারকটির একটি বিল্ডিং যা চলমান নয়, তাই কোনও মাউন্ট নেই। stackoverflow.com/questions/37328370/… । আমি আপনাকে সুপারিশ করছি আপনি এই সমস্ত জিনিসগুলি চেষ্টা করে দেখুন, এটি আরও বেশি অর্থবোধ করবে।
slm

1
আমি /bin/cp ../requirements.txt . && docker build ...ডকার তৈরির জন্য কেবল একটি
মেকফিলে যুক্ত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.