ডকফাইলে একটি স্ক্রিপ্ট চালান


93

আমি আমার ডকফাইলে আমার বিল্ডিং প্রক্রিয়া চলাকালীন স্ক্রিপ্ট চালানোর চেষ্টা করছি। তবে কাজ হচ্ছে বলে মনে হচ্ছে না।

আমি সেভাবে চেষ্টা করেছি:

FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]

এছাড়াও এইভাবে:

FROM php:7-fpm    
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"

এবং আমার চলমান ধারকটিও কার্যকর করছে:

docker exec symfony /bin/bash -c "/bootstrap.sh"

কিছুই কাজ মনে হচ্ছে না।

আপনি কীভাবে এটি জানেন?


না bootstarp.shএক্সিকিউটেবল বিট সেট আছে?
jwodder

সেই RUN chmod + x /bootstarp.sh এর মতো?
কেভিন

4
"কাজ করে না" দিয়ে, ঠিক কী ঘটছে? এটি একটি ত্রুটি দেখায়? ফাইলটি কি চিত্রের ভিতরে উপস্থিত রয়েছে? আপনি যদি docker exec -it symfony bashধারকটির ভিতরে থাকেন তবে আপনি নিজে স্ক্রিপ্টটি চালাতে এবং এর সামগ্রীগুলি পরীক্ষা করতে পারেন? ( cat bootstarp.sh)?
থাইজেতাঃ

এটি চেষ্টা করুন: docker exec symfony /bin/bash /bootstarp.shএবং আমাকে আউটপুটটি জানান।
বায়নাক্স

12
এরমার্গগার্ড বুটস্টার!
ব্রুনো ব্রোনোস্কি

উত্তর:


128

RUNএবং ENTRYPOINTস্ক্রিপ্ট চালানোর জন্য দুটি ভিন্ন উপায়।

RUNএর অর্থ এটি একটি মধ্যবর্তী কন্টেইনার তৈরি করে, স্ক্রিপ্টটি চালায় এবং নতুন ধারার চিত্রটিতে সেই ধারকটির নতুন স্থিতি স্থির করে দেয়। এর পরে স্ক্রিপ্টটি চলবে না: আপনার চূড়ান্ত চিত্রটি সেই স্ক্রিপ্টের ফলাফলটি প্রতিফলিত করবে বলে মনে করা হচ্ছে।

ENTRYPOINT এর অর্থ আপনার চিত্র (যা এখনও স্ক্রিপ্টটি কার্যকর করেনি) একটি ধারক তৈরি করবে এবং সেই স্ক্রিপ্টটি চালাবে।

উভয় ক্ষেত্রেই স্ক্রিপ্টটি যুক্ত করা দরকার এবং RUN chmod +x /bootstrap.shএটি একটি ভাল ধারণা।

এটি একটি শেবাং (যেমন #!/bin/sh) দিয়ে শুরু করা উচিত

আপনার স্ক্রিপ্টটি বিবেচনা করে ( bootstarp.sh: কয়েকটি git config --globalকমান্ড) RUNআপনার স্ক্রিপ্টটি একবারে সেরা Dockerfileহবে তবে সঠিক ব্যবহারকারীর ব্যবহার নিশ্চিত করা (গ্লোবাল git configফাইলটি %HOME%/.gitconfigযা পূর্বনির্ধারিত /rootএকটি)

আপনার ডকফাইলে যোগ করুন:

RUN /bootstart.sh

তারপরে, কোনও ধারক চালানোর সময়, /root/.gitconfigস্ক্রিপ্টটি চালিত হয়েছিল তা নিশ্চিত করার জন্য সামগ্রীটি পরীক্ষা করে দেখুন ।


4
এছাড়াও, আপনি বোঝানো হতে পারে bootstrap.shপরিবর্তে bootstarp.shদেখুন: stackoverflow.com/a/1254561/6309
VonC

কুল! RUN /bootstrap.sh এর সাথে খুব ভাল কাজ করে
কেভিন

4
প্রথম লাইনে শেবাংটি এটি আমার জন্য করেছিল, ধন্যবাদ! :)
জিডিআইকোমন্ডার

34

উপরের উত্তরগুলি ছাড়াও:

আপনি যদি উইন্ডোতে আপনার .sh স্ক্রিপ্ট ফাইলটি সম্পাদনা / সম্পাদনা করে থাকেন তবে নিশ্চিত হয়ে নিন যে এটি ইউনিক্স ফর্ম্যাটে লাইনের সমাপ্তি দিয়ে সংরক্ষণ করা হয়েছিল । ডিফল্টরূপে উইন্ডোজের অনেক সম্পাদক ইউনিক্স লাইনের সমাপ্তিগুলিকে উইন্ডো ফর্ম্যাটে রূপান্তরিত করে এবং লিনাক্স ফাইলের শুরুতে শেবাং (#! / Bin / sh) স্বীকৃতি দেয় না। সুতরাং লিনাক্স ত্রুটি বার্তা তৈরি করবে যেমন শেবাং নেই।

পরামর্শ:

  • আপনি যদি নোটপ্যাড ++ ব্যবহার করেন তবে আপনাকে "সম্পাদনা / ইওল রূপান্তর / ইউনিক্স (এলএফ)" ক্লিক করতে হবে
  • আপনি যদি ভিজ্যুয়াল স্টুডিও ব্যবহার করেন তবে আমি " শেষ অবধি " প্লাগইন ইনস্টল করার পরামর্শ দেব । তারপরে আপনি Ctrl-R, Ctrl-W টিপে লাইন এন্ডিংগুলি দৃশ্যমান করতে পারবেন। এবং লিনাক্স স্টাইলের শেষগুলি সেট করতে আপনি Ctrl-R, Ctrl-L টিপতে পারেন। উইন্ডোজ স্টাইলের জন্য, Ctrl-R, Ctrl-C টিপুন।

4
বাহ, তুমি আমার দিন বাঁচিয়েছ এই জন্য আপনাকে ধন্যবাদ.
mw

4
উজ্জ্বল! এটি আমার ঠিক সমস্যা ছিল!
কেভিনসিল

4
আমার ভিএসকোড উইন্ডোতে সিআরএলএফ-এ স্বয়ংক্রিয়ভাবে শেল স্ক্রিপ্টের রেখাযুক্ত সমাপ্তি সেট করেছিল। কিছু এলোমেলো চরিত্রের কারণে ডকার বিল্ড ব্যর্থ হয়েছিল। আমি ভিএস কোডে সেটিংস পরিবর্তন করেছি এবং এটি অবিলম্বে কাজ শুরু করে। ধন্যবাদ! আমি upvote।
অদিত্য উপাধ্যায়

24

ADDকমান্ড এবং ওয়ার্কিং ডিরেক্টরীর স্পেসিফিকেশন সহ স্ক্রিপ্ট তৈরি করার চেষ্টা করুন /root/script.shএটির মতো ("স্ক্রিপ্ট" স্ক্রিপ্টের নাম এবং যেখানে আপনি এটি ধারকটিতে চান এটি পৃথক পথ হতে পারে:

ADD script.sh /root/script.sh

এই ক্ষেত্রে ADDআগে অবশ্যই আসার চেষ্টা করেছেন CMD, যদি আপনি এক আছে BTW এটা হোস্ট মেশিন থেকে কন্টেইনারে কোনো অবস্থান থেকে আমদানি স্ক্রিপ্ট শীতল উপায়

ইন CMDজায়গা[./script]

এটি আপনার স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে কার্যকর করা উচিত

এছাড়াও আপনি নির্দিষ্ট করতে পারেন WORKDIRযেমন /root, তারপর স্বয়ংক্রিয়ভাবে রুট স্থাপন করা you'l, একটি ধারক শুরু উপরে


স্ক্রিপ্ট.শ প্রথমে রয়েছে যেখানে ডকার কীভাবে সনাক্ত করতে পারে? আমি বলতে চাইছি, প্রথম প্যারামিটারscript.sh
সূর্যাস্ত

যেহেতু আপনি ধারক তৈরি করছেন,
মাইকেল

প্রথম পরমের পথ এবং নামটি script.shআপেক্ষিকভাবেDockerfile
এজা

4

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

এখানে, আমি scriptsআমার স্ক্রিপ্টটি স্থাপন এবং এটি থেকে চালাতে একটি উপ-ফোল্ডার তৈরি করছি :

RUN mkdir -p /scripts
COPY script.sh /scripts
WORKDIR /scripts
RUN chmod +x script.sh
RUN script.sh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.