প্রশ্ন একটি ডকার ইমেজ চালানোর সময় আমি কিভাবে সিএমডি override করতে পারি?


আমি একটি এন্ট্রি পয়েন্ট এবং cmd নির্দিষ্ট উভয় দিয়ে তৈরি একটি ডকার ইমেজ পরিদর্শন করতে চান, উদাহরণস্বরূপ:

ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]

আমি বর্তমানে করি:

docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login

সিএমডি খালি হতে ওভাররাইড করার উপায় আছে (তাই আমাকে "--login" ব্যবহার করতে হবে না)?


83
2018-05-10 12:59


উত্স




উত্তর:


আপনি শুধু মাধ্যমে প্রবেশ করতে পারে docker run -it --entrypoint=/bin/bash $IMAGE -i (আপনি ইমেজ থেকে একটি নতুন ধারক চালু করবেন এবং ইন্টারেক্টিভ মোডে একটি বাশ শেল পাবেন), তারপরে সেই কন্টেইনারে এন্ট্রিপয়েন্ট কমান্ড চালান।

তারপর আপনি চলমান কন্টেইনার পরিদর্শন করতে পারেন এটি চালানো উচিত।

সম্পাদনা: ডকার 1.3 আপনি ব্যবহার করতে পারেন exec একটি চলমান ধারক একটি প্রক্রিয়া চালানোর জন্য। আপনার কন্টেইনারটি স্বাভাবিকভাবে শুরু করুন এবং তারপর এটি প্রদান করে লিখুন:

docker exec -it $CONTAINER_ID /bin/bash

Assuming bash ইনস্টল করা হয় আপনি চলমান ধারক শেল অ্যাক্সেস দেওয়া হবে।


92
2018-05-12 09:28



যে চালানো হবে না "/ usr / sbin / apache2ctl / bin / bash"? (আপনার উদাহরণটি এন্ট্রিপয়েন্টকে ওভাররাইড করে না কারণ এটি ডকারফিল-এ নির্ধারিত এন্ট্রিপয়েন্ট ব্যবহার করবে - নাকি আমি কিছু মিস করছি?) - warp
পুরোনো / নতুন ডকার সংস্করণের জন্য ভিন্ন কিছু যা সম্ভবত? এটা অবশ্যই আমার জন্য এন্ট্রি পয়েন্ট চালায়: gist.github.com/warpr/26a5cc471dce7fcf9021 । এটি উবুন্টু 13.10 এ ডকার 0.10.0 ব্যবহার করছে। - warp
পাসিং -entrypoint এন্ট্রিপয়েন্ট overrides। সম্পাদিত উত্তর দেখুন - Panagiotis Moustafellos
আমি passing জানি --entrypoint এন্ট্রিপয়েন্ট overrides। কিন্তু যখন আমি --entrypoint ব্যবহার করি, আমি কীভাবে সিএমডি খালি রাখতে পারি? (ব্যাশের জন্য আমি -i বা --login মত কিছু ব্যবহার করতে পারি, কিন্তু আমি যে সমস্ত এন্ট্রিপয়েন্ট ব্যবহার করতে চাই তা হবে সমান "ডামি" যুক্তি নেই)। - warp
অন্তত ডকার ভ1.11.1-এ এটি প্রদর্শিত হয় যে --entrypoint overriding এছাড়াও এন্ট্রিপয়েন্টে সিএমডি স্বাভাবিক সংযোজনকে বাধা দেয়। যে শুধুমাত্র এন্ট্রিপয়েন্ট overridden হয় না যখন মনে হয়। - Jasmine Hegman


দেখুন: https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

প্রাসঙ্গিক অংশ:

সিএমডি (ডিফল্ট কমান্ড বা বিকল্প) ডকার কমান্ডলাইনে ঐচ্ছিক COMMAND প্রত্যাহার করুন:

$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

এই কমান্ডটি ঐচ্ছিক কারণ যে ব্যক্তিটি IMAGE তৈরি করেছে সেটি ইতিমধ্যে ডকারফিল সিএমডি ব্যবহার করে একটি ডিফল্ট কম্যান্ড সরবরাহ করতে পারে। অপারেটর (ব্যক্তিটি ইমেজ থেকে একটি কন্টেইনার চালাচ্ছে) হিসাবে, আপনি একটি নতুন COMMAND নির্দিষ্ট করে কেবলমাত্র সিএমডিকে ওভাররাইড করতে পারেন।

চিত্রটি যদি একটি ENTRYPOINT নির্দিষ্ট করে তবে সিএমডি বা COMMAND ENTRYPOINT এ আর্গুমেন্ট হিসাবে যোগ করা হয়।

তাই আপনি কি করতে চান তা করতে কেবল একটি cmd উল্লেখ করুন, এবং ব্যবহার করে ওভাররাইড /bin/bash। পুরোপুরি "খালি" নয়, তবে এটি 99% সম্পন্ন করে।


19
2018-06-12 07:31



ওহো, আমি একটি বিস্তারিত উপেক্ষা। শর্টকাট ছাড়া --loginথেকে -l আমি আপনার সমাধান ইতিমধ্যে হিসাবে ভাল হিসাবে অনুমান। - Simon Thum
আজ আমি দেখেছি একটি মজার জিনিস: কমান্ড overridden হয় না, এটি যোগ করা হয়। এখানে কন্টেইনার ভিতরে থেকে PS। উল্লেখ্য যে আমি যে কমান্ডটি যুক্ত করেছি তা "ডিবি সেট আপ করা" ইকো এবং বিল্ট ইন কমান্ড হল / usr / bin / gath। এছাড়াও আমি "" হতে প্রবেশকেন্দ্র সেট। 1 ? Ssl 0:00 /usr/bin/geth echo setting up db - Paul S
ডকার রেফারেন্স লিংক আর কাজ করে না - এটির জন্য একটি সুস্পষ্ট প্রতিস্থাপন খুঁজে পাওয়া যায় না। - Chris Kimpton
আমি এটা ঠিক করেছি, কিন্তু খুঁজে পাওয়া খুব কঠিন ছিল; ( - Simon Thum


যে কেউ এখানে অন্য কমান্ড পাস করার জন্য এন্ট্রি পয়েন্ট এবং কমান্ড ওভাররাইড করতে এখানে আসছে। এন্ট্রিপয়েন্ট স্ক্রিপ্টের পরিবর্তে ব্যাশটি চালান এবং তারপরে পরামিতিগুলির সাথে অন্য কোন কমান্ড চালান (অন্যান্য উত্তর থেকে আমাকে স্পষ্ট নয়):

 docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'

-c 'npm link ...' জন্য পরামিতি হয় /bin/sh তাই এখানে আপনি কন্টেইনারে চালাতে চান এমন কোনো কমান্ড পাস করতে পারেন। /bin/sh আলপিন ইমেজ জন্য, /bin/bash অন্যান্য ইমেজ জন্য সম্ভবত।


7
2018-05-04 07:28



শুধু একটি addtion শেল কমান্ড জson ভিত্তিক লেখার হওয়া উচিত, তাই একক উদ্ধৃতি দিয়ে উদ্ধৃত করার পরিবর্তে '...' ডবল কোট ব্যবহার করুন "..." - Jimmy Obonyo Abor