ডকফাইফিলের মধ্যে একটি পরিবর্তনশীল কীভাবে সংজ্ঞায়িত করবেন?


155

আমার ডকফাইফিলে আমি ভেরিয়েবলগুলি সংজ্ঞায়িত করতে চাই যা আমি পরে ডকফাইফিলের মধ্যে ব্যবহার করতে পারি

আমি ENVনির্দেশ সম্পর্কে সচেতন , কিন্তু আমি চাই না যে এই পরিবর্তনকগুলি পরিবেশের পরিবর্তনশীল হয়ে উঠুক।

ডকফাইফিল স্কোপে ভেরিয়েবলগুলি ঘোষণার কোনও উপায় আছে কি ?


10
আপনি এআরজি ব্যবহার করতে পারেন
ডকস.ডকার

@ lumos0815, আমি মনে করি যে এটি আপনার উত্তর হিসাবে পোস্ট করা উচিত (যদিও এটি একটি পুরাতন পোস্ট; বংশোদ্ভূত জন্য) ঠিক ওপি যা বলছে তা ঠিক তাই।
shriek

এআরজি কোনও ভেরি সংজ্ঞা দেয় না যা ডকফাইফিলের মধ্যে ব্যবহার করা যেতে পারে। আপনি যা খুঁজছেন তা পেতে আপনাকে ENV কমান্ডের সাথে মিলিত করতে হবে; এআরজি ফু; ENV FOO = $ foo; কপি ফাইল $ ফু (খারাপ ফর্ম্যাটিংয়ের জন্য দুঃখিত, আমি অনুমান করি যে কোনও ফোন থেকে কোড ব্লক এবং মাল্টি লাইন করা সম্ভব নয়)
এনটিউরকগুরু

উত্তর:


111

আপনি ব্যবহার করতে পারেন ARG- https://docs.docker.com/engine/references/builder/#arg দেখুন

ARGনির্দেশ একটি পরিবর্তনশীল যে ব্যবহারকারীদের সাথে নির্মাতার বিল্ড-সময়ে পাস করতে পারেন সংজ্ঞায়িত docker buildকমান্ড ব্যবহার করে --build-arg <varname>=<value>পতাকা। যদি কোনও ব্যবহারকারী কোনও বিল্ড আর্গুমেন্ট নির্দিষ্ট করে যা ডকফাইফিলে সংজ্ঞায়িত হয়নি, বিল্ডটি একটি ত্রুটি তৈরি করে।


@ মারগাচক্রিসকে COPY
lumos0815

এটি কপি কমান্ডের জন্য কাজ করছে বলে মনে হচ্ছে না। docs.docker.com/engine/references/builder/#arg
ফেমিবাইট

54

আমার জ্ঞানের কাছে কেবল ENV" পরিবেশ প্রতিস্থাপন " হিসাবে উল্লিখিত হিসাবে এটিই অনুমতি দেয়

পরিবেশ পরিবর্তনশীল ( ENVবিবৃতি দিয়ে ঘোষিত ) ডকফায়াইল দ্বারা ব্যাখ্যা করার জন্য ভেরিয়েবল হিসাবে নির্দিষ্ট নির্দেশাবলীতেও ব্যবহার করা যেতে পারে।

ডকফাইফাইলের প্রতিটি লাইনের জন্য তৈরি প্রতিটি নতুন পাত্রে পুনরায় ঘোষিত করার জন্য তাদের পরিবেশের পরিবর্তনশীল হতে হবে docker build

অন্য কথায়, এই ভেরিয়েবলগুলি সরাসরি ডকফাইফিলের মধ্যে ব্যাখ্যা করা হয় না, তবে ডকফেরাইল লাইনের জন্য তৈরি পাত্রে ব্যবহৃত হয়, সুতরাং পরিবেশ পরিবর্তনশীলের ব্যবহার of


এই দিনটিতে, আমি উভয়ই ARG( ডকার 1.10+, এবংdocker build --build-arg var=value ) ব্যবহার করি ENV
ব্যবহার ARGএকা মানে হল আপনার পরিবর্তনশীল বিল্ড সময় এ দৃশ্যমান না রানটাইম এ।

আমার ডকফাইফিলের সাধারণত:

ARG var
ENV var=${var}

আপনার ক্ষেত্রে, ARGযথেষ্ট: আমি সাধারণত এটি পোস্ট_প্রক্সি ভেরিয়েবল সেট করার জন্য ব্যবহার করি, সেই ডকার বিল্ডটি নির্মাণের সময় ইন্টারনেট অ্যাক্সেসের জন্য প্রয়োজন।


51

আপনার প্রশ্নের উত্তর দিতে:

আমার ডকফাইফিলে আমি ভেরিয়েবলগুলি সংজ্ঞায়িত করতে চাই যা আমি পরে ডকফাইফিলের মধ্যে ব্যবহার করতে পারি।

আপনি এর সাথে একটি ভেরিয়েবল সংজ্ঞায়িত করতে পারেন:

ARG myvalue=3

সমান চরিত্রের চারপাশের স্পেসগুলি অনুমোদিত নয়।

এবং পরে এটি ব্যবহার করুন:

RUN echo $myvalue > /test

13

যদি ভেরিয়েবল একই RUNনির্দেশের মধ্যে পুনরায় ব্যবহার করা হয় তবে সহজেই একটি শেল ভেরিয়েবল সেট করতে পারে। আমি সত্যিই পছন্দ করি যে তারা কীভাবে অফিসিয়াল রুবি ডকফায়াইলের সাথে এটি পৌঁছেছিল


দুর্দান্ত উত্তর। আপনার যদি সম্ভব হয় তবে এআরজি ব্যবহার করা উচিত, কখনও কখনও আপনাকে ডায়নামিক ভেরিয়েবল বরাদ্দ করতে এবং পুনরায় ব্যবহার করতে হবে। উদাহরণ:RUN foo=$(date) && echo $foo
উইসবাকি

3

আপনি ব্যবহার করতে পারেন ARG variable defaultValueএবং রান কমান্ড চলাকালীন আপনি এমনকি এই মানটি ব্যবহার করে আপডেট করতে পারেন --build-arg variable=value। ডকার ফাইলে এই ভেরিয়েবলগুলি ব্যবহার করতে আপনি এগুলি $variableরান কমান্ড হিসাবে উল্লেখ করতে পারেন ।

দ্রষ্টব্য: এই ভেরিয়েবলগুলি লিনাক্স কমান্ডগুলির মতো উপলভ্য RUN echo $variableহবে এবং সেগুলি চিত্রটিতে টিকবে না।

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