ডকার প্রসঙ্গের বাইরে সিমলিংক অনুসরণ করুন


93

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

parent_dir
    - common_files
        - file.txt
    - dir1
        - Dockerfile  
        - symlink -> ../common_files

উপরের উদাহরণে, আমি যখন dir1 এর ভিতরে বিল্ড ডকার করি তখন ফাইল.txt অনুলিপি করা উচিত। তবে আমি file.txt এর একাধিক অনুলিপি বজায় রাখতে চাই না। প্রতি Docker সংস্করণ 0.10 হিসাবে এই লিঙ্ক, , Docker নির্মাণ করা আবশ্যক

ADD বিল্ড নির্দেশাবলীর জন্য ধারকগুলির মূলের অভ্যন্তরে থাকা সিমলিংকগুলি অনুসরণ করুন।

তবে আমি যখন আমার ডকফাইফিলের মধ্যে এই লাইনগুলির কোনওটি দিয়ে তৈরি করি তখন আমি এ জাতীয় কোনও ফাইল বা ডিরেক্টরি পাই না:

ADD symlink /path/dirname বা ADD symlink/file.txt /path/file.txt

মাউন্ট বিকল্পটি আমার জন্য এটি সমাধান করবে না (ক্রস প্ল্যাটফর্ম ...)। আমি চেষ্টা করেছিলামtar -czh . | docker build -t সাফল্য ছাড়া ।

ডকার সিমলিংকটি অনুসরণ করে তৈরি সাধারণ পাত্রে কমন_ফায়ালগুলি / file.txt অনুলিপি করার কোনও উপায় আছে কি?

উত্তর:


70

এটি সম্ভব নয় এবং কার্যকর করা হবে না। গিথুব ইস্যু # 1676 নিয়ে আলোচনাটি একবার দেখুন :

আমরা এটির অনুমতি দিই না কারণ এটি পুনরাবৃত্তিযোগ্য নয়। আপনার মেশিনে একটি সিমিলিংক আমার মেশিনের মতো নয় এবং একই ডকফিলিলে দুটি পৃথক ফলাফল তৈরি করতে পারে। এছাড়াও / etc / paasswd- তে সিমলিংক থাকার কারণে সমস্যা দেখা দিতে পারে কারণ এটি আপনার স্থানীয় ফাইলগুলি নয় হোস্ট ফাইলগুলিকে লিঙ্ক করবে।


ধন্যবাদ. হ্যাঁ আমি আগে এই লিঙ্কটি লক্ষ্য করেছি তবে আমি ভেবেছিলাম যে এটি ডকারের অনেক পুরানো সংস্করণের জন্য (0.6.1)। 0.10 এর পরিবর্তিত লগের ধরণ উল্লেখ করে এটি সম্ভব github.com/docker/docker/blob/master/…
রবি

এছাড়াও যদি "প্যারেন্ট_ডির" যে কোনও কম্পিউটারে চেক আউট করা হয় এবং যদি সিমলিংকের "কমন_ফায়ালস" এর সাথে আপেক্ষিক পথ থাকে তবে এটি পুনরাবৃত্তিযোগ্য হবে।
রবি

4
আপনার উক্তির Follow symlinks inside container's root for ADD build instructions.অর্থ হ'ল ধারকটির অভ্যন্তরে সিমলিঙ্কগুলি অনুসরণ করা হয়। বিল্ড কনটেক্সট ডিরেক্টরিতে নেই। ইন ADD file.txt /dir/file.txtডিরেক্টরির dirএকটি সিমবলিক লিঙ্ক হতে পারে। আমার উত্তরে আমি যে যুক্তিগুলি উদ্ধৃত করেছি সেগুলি এখনও বৈধ এবং প্রতীকগুলি এখনও সর্বশেষ সংস্করণে অনুসরণ করা হয় নি। যখন তোমার মত রিভিশন কন্ট্রোল সিস্টেমের মধ্যে symlinks সংরক্ষণ আপনি (repeatability সংক্রান্ত) এতে সমস্যায় পড়তে পারেন Git । সুতরাং দয়া করে এই প্রশ্নটি দেখুন
0x7d7b

4
আমি আপনার গিমে প্রতীক সম্পর্কিত বিষয়টি দেখছি। তবে সিমলিংকগুলি যদিও গিটে যেতে হবে না। একটি সাধারণ সেটআপ স্ক্রিপ্ট স্থানীয় env তৈরি করে symlinks তৈরি করতে পারে। আমার কাছে, একটি ভাগ করা ফাইলের 'এন' অনুলিপিগুলি রাখার ব্যয় রক্ষণাবেক্ষণের দৃষ্টিভঙ্গি থেকে খুব বেশি দেখা যায়। হয়তো আমাকে এপাচে বাইরে পরিবেশন করতে হবে। ধন্যবাদ.
রবি

21
কী লজ্জাজনক, আমি যখন পয়েন্টটি দেখছি আমি যুক্তিটি অনুসরণ করি না এবং এটি আমাকে কামড় দেয়। গিট সিম্বলিংকগুলি ঠিক নিখুঁতভাবে পরিচালনা করে, এবং আমি আশা করি যে বিল্ডগুলি সমস্ত মেশিন এবং পরিবেশ জুড়ে কাজ করবে যেখানে সোর্স রেপো চেক আউট হয়ে গেছে ..!?
গ্রেগর

9

একটি সম্ভাবনা হ'ল পিতৃ ডিরেক্টরিতে বিল্ডটি চালানো:

$ docker build [tags...] -f dir1/Dockerfile .

(বা সমানভাবে, শিশু ডিরেক্টরিতে,)

$ docker build  [tags...] -f Dockerfile ..

ডকফাইফাইলকে উপযুক্ত পাথের সাথে অনুলিপি / যুক্ত করতে কনফিগার করতে হবে। আপনার সেটআপের উপর নির্ভর করে আপনি .dockerignoreপিতামাতার মধ্যে এমন একটি জিনিস রাখতে চান যা আপনি প্রসঙ্গে রাখতে চান না।


8

কারও কাছে যদি এখনও এই সমস্যা থাকে তবে আমি সুপারসার ডটকম এ খুব সুন্দর সমাধান পেয়েছি:

/superuser/842642/how-to-make-a-symlinked-folder-appear-as-a-normal-folder

এটি মূলত সিমলিংকগুলি অবলম্বন করতে এবং ফলকে ডকার বিল্ডে ফিড করার জন্য টার ব্যবহারের পরামর্শ দেয়:

$ tar -czh . | docker build -

: আমি 2 ত্রুটি পেতে tar: Failed to clean up compressor,Error response from daemon: the Dockerfile (Dockerfile) cannot be empty
ইভান Rubinson

3

সিমলিঙ্কগুলি ব্যবহার করার পরিবর্তে অনুলিপিগুলি অনুলিপি করা বা সিমলিঙ্কগুলি তৈরির পরিবর্তে কেবলমাত্র সাইট_এলটিবল থেকে ফাইলগুলি সরানো_ সাইটগুলিতে সরিয়ে দিয়ে প্রশাসনিকভাবে সমস্যার সমাধান করা সম্ভব is

সুতরাং আপনার সাইট কনফিগারেশনটি কেবলমাত্র সাইট_ উপলব্ধ ফোল্ডারে বন্ধ হয়ে গেলে কেবল কোনও অনুলিপি বা কিছু ব্যবহার করা উচিত বা সাইট_এনেবেলে থাকবে it


1

আমি জানি যে এটি ডকার বিল্ডিংয়ের বহনযোগ্যতা ভঙ্গ করে, তবে আপনি প্রতীকী পরিবর্তে হার্ড লিঙ্কগুলি ব্যবহার করতে পারেন:

ln /some/file ./hardlink

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