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


123

আমি এন্ট্রিপয়েন্ট এবং সেন্টিমিডি নির্দিষ্ট করে অন্য কারও দ্বারা নির্মিত ডকার চিত্রটি পরীক্ষা করতে চাই, উদাহরণস্বরূপ:

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

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

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

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

উত্তর:


125

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

এরপরে আপনি যে রাজ্যে চলমান তা চালানো পাত্রটি পরীক্ষা করতে পারেন।

সম্পাদনা: ডকার ১.৩ যেহেতু আপনি execচলমান পাত্রে কোনও প্রক্রিয়া চালাতে ব্যবহার করতে পারেন । আপনি সাধারণত যা করতে চান তেমন আপনার ধারকটি শুরু করুন এবং তারপরে এটি জারি করে প্রবেশ করুন:

docker exec -it $CONTAINER_ID /bin/bash

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


এটি কি "/ usr / sbin / apache2ctl / bin / bash" চালায় না? (কারণ আপনার উদাহরণটি এন্টিপয়েন্টকে ওভাররাইড করে না এটি ডকফাইফিলে সংজ্ঞায়িত এন্টিপয়েন্টটি ব্যবহার করবে - বা আমি কিছু মিস করছি?)
ওয়ার্প

এটি কি পুরানো / নতুন ডকার সংস্করণের জন্য আলাদা যা সম্ভবত? এটি অবশ্যই আমার জন্য প্রবেশপথটি চালায়: gist.github.com/warpr/26a5cc471dce7fcf9021 । এটি উবুন্টু 13.10 এ ডকার 0.10.0 ব্যবহার করছে।
warp

4
আমি জানি পাসিং-এন্ট্রিপয়েন্টটি এন্ট্রিপয়েন্টকে ওভাররাইড করে। তবে যখন আমি --entryPoint ব্যবহার করি তখন কীভাবে আমি সিএমডি ফাঁকা হয়ে ওভাররাইড করব? (বাশের জন্য আমি -i বা - লগিনের মতো কিছু ব্যবহার করতে পারি, তবে আমি যে সমস্ত এন্ট্রিপয়েন্টগুলি ব্যবহার করতে চাই সেগুলির সমপরিমাণ "ডামি" যুক্তি থাকতে পারে না)।
ওয়ার্প

1
কমপক্ষে ডকার ভি ১.১.১.১ এ দেখা যায় যে --entryPoint পয়েন্টটি ওভাররাইড করাও সিএমডি-র সাধারণ প্রবেশ প্রবেশপয়েন্টে আটকাতে বাধা দেয়। এটি কেবল তখনই ঘটবে যখন এন্ট্রিপয়েন্টটি ওভাররাইড করা হবে না।
জেসমিন হেগম্যান

1
কেন -iপরে আছে $IMAGE?
আইয়াল লেভিন

27

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

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

সিএমডি (ডিফল্ট কমান্ড বা বিকল্পগুলি) ডকার কমান্ডলাইনে optionচ্ছিক COMMAND পুনরুদ্ধার করুন:

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

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

চিত্রটি যদি কোনও ENTRYPOINT নির্দিষ্ট করে তবে সিএমডি বা কম্যান্ড ENTRYPOINT- তে যুক্তি হিসাবে যুক্ত হবে।

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


ওফস, আমি একটি বিবরণ উপেক্ষা করেছি। সংক্ষেপিত ছাড়া --loginকরার -lআমি আপনার সমাধান ইতিমধ্যে এটি পায় হিসাবে হিসাবে ভাল।
সাইমন থম

আমি আজ একটি মজাদার জিনিস দেখেছি: কমান্ডটি ওভাররাইড করা হয়নি, এটি সংযুক্ত করা হয়েছে। ধারকটির ভিতরে থেকে এখানে পিএস। নোট করুন যে আমি যে কমান্ডটি যুক্ত করেছি তা ছিল "ডিবি স্থাপন করা" প্রতিধ্বনি এবং বিল্ট ইন কমান্ডটি হ'ল / ইউএসআর / বিন / জেথ। এছাড়াও আমি এন্ট্রিপয়েন্টটি "" হতে সেট করেছি। 1 ? Ssl 0:00 /usr/bin/geth echo setting up db
পল এস

ডকার রেফারেন্স লিঙ্কটি আর কাজ করে না - এর কোনও সুস্পষ্ট প্রতিস্থাপন খুঁজে পাচ্ছে না।
ক্রিস কিম্পটন

আমি কেবল এটি ঠিক করেছিলাম, তবে এটি খুঁজে পাওয়া আমার পক্ষেও কঠিন ছিল ((
সাইমন থুম

15

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

 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সম্ভবত অন্যান্য চিত্রগুলির জন্য।


1
কেবলমাত্র একটি অ্যাডশন শেল কমান্ডগুলি জসন ভিত্তিক রাইটেন হওয়া উচিত, সুতরাং একক উদ্ধৃতি দিয়ে উদ্ধৃত করার পরিবর্তে '...'ডাবল উদ্ধৃতি ব্যবহার করুন"..."
জিমি ওবনিও অ্যাবোর

অথবা কেবলমাত্র যতগুলি --entryPoint আর্গুমেন্ট আপনি চান তা পাস করুন
নিক রোজ

এটি কাজ করে বলে মনে হচ্ছে না: "exec:।" - c \ ": এক্সিকিউটেবল ফাইলটি $ PATH" তে পাওয়া যায় নি: অজানা।
রিচার্ড

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