নির্দিষ্ট RUN কমান্ডের জন্য ক্যাশে অক্ষম করুন


98

RUNআমার ডকফাইলে আমার কয়েকটি কমান্ড রয়েছে যা -no-cacheপ্রতিবারই আমি ডকার ইমেজ তৈরির সাথে চালাতে চাই ।

আমি বুঝতে পারি docker build --no-cacheপুরো ডকফাইফিলের জন্য ক্যাশে অক্ষম করবে।

নির্দিষ্ট RUN কমান্ডের জন্য কী ক্যাশে অক্ষম করা সম্ভব?


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

4
আমি নির্দিষ্ট স্তরগুলি পুনর্নির্মাণের আশা করছিলাম, উদাহরণস্বরূপ "গিট টান" কমান্ড। রেপো আপডেট হওয়া সত্ত্বেও এখনই "গিট পুল" কমান্ডটি ক্যাশে হবে।
ভিংটোফট

4
অব্যবহৃত তর্কটি পাস করে একটি টানকে জোর করা যথেষ্ট সহজ। তবে সেই ক্যাশেড এন্ট্রিটির পুনর্নির্মাণের ফলাফলটি হল যে নিম্নলিখিত সমস্ত স্তরগুলির একটি পুনর্নির্মাণের প্রয়োজন হবে। উদাহরণস্বরূপ আমার উত্তর এখানে দেখুন ।
বিএমবিচ

গিট রিমোট পরিবর্তিত হয়ে গেলে ক্যাশেটি অবৈধ করতে চাইলে একবার দেখুন: ডকফেরফিল ক্যাশে গিট ক্লোনটি কীভাবে প্রতিরোধ করবেনলিঙ্কিত উত্তরের জন্য সমস্ত ক্রেডিট @ ইঙ্ককে
hpgmiskin

উত্তর:


79

আপনি যে অঞ্চলে ক্যাশে অক্ষম করতে চান তার আগে কিছু অর্থহীন এবং সস্তা-থেকে-চালিত কমান্ড সন্নিবেশ করার একটি বিকল্প রয়েছে always

এই ইস্যু মন্তব্যে প্রস্তাবিত হিসাবে , কেউ একটি বিল্ড আর্গুমেন্ট ব্লক যুক্ত করতে পারে (নাম নির্বিচারে হতে পারে):

ARG CACHEBUST=1 

এই অঞ্চলের আগে, এবং প্রতিটি রানকে তার আর্গুমেন্ট --build-arg CACHEBUST=$(date +%s)হিসাবে যুক্ত করে এর মানটি সংশোধন করুন docker build(মানটিও স্বেচ্ছাচারিত হতে পারে, এটি বর্তমান তারিখের সময়, রানগুলি জুড়ে তার স্বাতন্ত্র্যতা নিশ্চিত করার জন্য)।

এটি অবশ্যই নিম্নলিখিত সমস্ত ব্লকের জন্যও ক্যাশে অক্ষম করবে, কারণ অন্তর্বর্তী চিত্রের হ্যাশ যোগফলটি আলাদা হবে, যা ডক বর্তমানে কীভাবে কাজ করে তা বিবেচনায় রেখে সত্যই নির্বাচিত ক্যাশে একটি অ-তুচ্ছ সমস্যাকে অক্ষম করে তোলে।


4
আর কাজ করছে বলে মনে হচ্ছে না, কেবল ---> Using cacheআমার ʻ Gআরজি ক্যাচবাস্ট = 1` লাইনের অধীনে ... (এবং হ্যাঁ আমি --build-arg CACHEBUST=$(date +%s)আমার ডকার
কমান্ডেই করেছি

আমার পক্ষেও কাজ করে না, সম্ভবত এটি প্ল্যাটফর্ম নির্ভর। আমি ক্যাশে অবৈধ করার জন্য কোনও এআরজি পরিবর্তন আশা করতাম।
অলিভার

6
আপনাকে কেবল যুক্ত করতে হবে RUN echo "$CACHEBUST"যেমন ব্যবহার করা ARGক্যাশেটিকে অকার্যকর করবে না
সিদ্ধার্থ ভি

এই উত্তর এখানে আমার সমস্যা মীমাংসিত stackoverflow.com/questions/63709147/...
শাপিরো য়াকোভ

25

ব্যবহার

ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipcache

আপনি সর্বদা চালাতে চান রুন লাইনের আগে। এটি কাজ করে কারণ এডিডি সর্বদা ফাইল / ইউআরএল আনবে এবং উপরের ইউআরএল প্রতিটি অনুরোধে এলোমেলো তথ্য উত্পন্ন করে, ডকার তারপরে ফলাফলের সাথে তুলনা করে এটি ক্যাশে ব্যবহার করতে পারে কিনা তা দেখার জন্য।

আমি এটিও পরীক্ষা করে দেখেছি এবং দুর্দান্তভাবে কাজ করেছি যেহেতু এটির জন্য কোনও অতিরিক্ত ডকার কমান্ড লাইন আর্গুমেন্টের প্রয়োজন হয় না এবং ডকার-কমপোজ.আইএমএল ফাইল থেকেও কাজ করে :)


4
র্যান্ডম.আরজি যদি সেই শেষ পয়েন্টটি পরিবর্তন করার সিদ্ধান্ত নেয় তবে কী হবে? আপনি কিভাবে এই আচরণ নিয়ন্ত্রণ করতে হবে?
আন্দ্রেস লিওন রেঞ্জেল

@ অ্যান্ড্রেসলিওন্যাঞ্জেল স্বীকার করেছেন যে এটি ডকার বৈশিষ্ট্য নয় তবে ডকার সিনট্যাক্স এবং বিশিষ্ট ওয়েব সার্ভিস ব্যবহার করে যা প্রায় ২০+ বছর ধরে চলছে, তবে আপনি ঠিক বলেছেন যে এগুলি শেষ পয়েন্টটি অবমানন করতে পারে, বাস্তবে এখন তাদের ডক্সের দিকে তাকিয়ে থাকতে হবে এমনকি আমি "র্যান্ডবাইট" শেষ পয়েন্টটিও খুঁজে পাচ্ছি না এবং বিটাতে তাদের একটি নতুন এপিআই রয়েছে। আপনি যদি 1) এই শেষ পয়েন্টটি ব্যর্থ না হওয়া অবধি ব্যবহার অবিরত করতে পারেন, 2) তাদের নতুন শেষ পয়েন্টটি ব্যবহার করুন (এটি ব্যর্থ হওয়া অবধি) বা 3) আপনার নিজের র্যান্ডম এন্ডপয়েন্টটি লিখুন যেখানে আপনি সম্পূর্ণ নিয়ন্ত্রণে
স্টিভ

4
এটি কিছু সময় ব্যর্থ হয়েছিল ... যখন সাইটটি ডাউন থাকে !!! আমি মনে করি এটি এর জন্য নিখুঁত সমাধান নয়। যোগ ব্যর্থ হয়েছে: পেতে ব্যর্থ হয়েছে random.org/cgi-bin/randbyte?nbytes=10&format=h <! DOCTYPE html>: STATUS 503 সেবা বন্ধ সঙ্গে
Kathi

4
random.org DDOS সুরক্ষা যোগ করেছে যা এখন এই সমাধানটি ভঙ্গ করে
ব্র্যাড রুট

এটা কাজ করে না এবং প্রদত্ত addess আয় 503. আপনি আপনার পাইপলাইনগুলি ব্লক করতে এই সমাধান ব্যবহার করবেন না না চান তাহলে
OlegI

8

সরাসরি নয় তবে আপনি আপনার ডকফিলকে বিভিন্ন অংশে বিভক্ত করতে পারেন, একটি চিত্র তৈরি করতে পারেন, তারপরে পরের ডকফায়ফিলের শুরুতে এই চিত্রটি থেকে এবং ক্যাচিং বা ছাড়াই চিত্রটি তৈরি করতে পারেন


4
এটি কি বেস ডকারের চিত্রটিতে প্রত্যাবর্তিত স্তরগুলি আপডেট করতে সক্ষম করবে?
ব্যবহারকারীর_মদা



0

আমি বিশ্বাস করি যে এটি উপরে @ স্টিভের উত্তরে সামান্য উন্নতি:

RUN git clone https://sdk.ghwl;erjnv;wekrv;qlk@gitlab.com/your_name/your_repository.git

WORKDIR your_repository

# Calls for a random number to break the cahing of the git clone
# (/programming/35134713/disable-cache-for-specific-run-commands/58801213#58801213)
ADD "https://www.random.org/cgi-bin/randbyte?nbytes=10&format=h" skipcache
RUN git pull

এটি গিট ক্লোনটির ডকার ক্যাশে ব্যবহার করে তবে এটি সংগ্রহস্থলের একটি অনাবৃত আপডেট চালায়।

এটি কাজ করে বলে মনে হচ্ছে এবং এটি আরও দ্রুত - তবে অন্তর্নিহিত নীতিগুলি সরবরাহ করার জন্য @ স্টিভকে অনেক ধন্যবাদ।


-2

আরেকটি দ্রুত হ্যাক হ'ল আপনার কমান্ডের আগে কিছু এলোমেলো বাইট লিখুন

RUN head -c 5 /dev/random > random_bytes && <run your command>

5 টি এলোমেলো বাইট লিখেছেন যা একটি ক্যাশে মিস করতে বাধ্য করবে


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