سؤال كيف يمكنني تجاوز CMD عند تشغيل صورة عامل ميناء؟


أرغب في فحص صورة عامل ميناء تم إنشاؤها بواسطة شخص آخر مع كل من نقطة دخول و cmd محددة ، على سبيل المثال:

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

أنا أفعل الآن:

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

هل هناك طريقة لتجاوز CMD لتكون فارغة (لذلك ليس من الضروري استخدام "--log")؟


83
2018-05-10 12:59


الأصل




الأجوبة:


يمكنك فقط الدخول عبر docker run -it --entrypoint=/bin/bash $IMAGE -i (ستقوم بإطلاق حاوية جديدة من الصورة والحصول على shell bash في الوضع التفاعلي) ، ثم تشغيل أمر نقطة الدخول في تلك الحاوية.

يمكنك بعد ذلك فحص حاوية التشغيل في الحالة التي يجب تشغيلها.

تحرير: منذ Docker 1.3 يمكنك استخدامها exec لتشغيل عملية في حاوية قيد التشغيل. ابدأ الحاوية كما تفعل عادة ، ثم أدخلها عن طريق إصدار:

docker exec -it $CONTAINER_ID /bin/bash

بافتراض تثبيت bash سيتم منحك shell الوصول إلى الحاوية قيد التشغيل.


92
2018-05-12 09:28



ألن يعدم ذلك "/ usr / sbin / apache2ctl / bin / bash"؟ (لأن المثال الخاص بك لا يتجاوز نقطة الدخول فإنه سيتم استخدام نقطة الدخول المحددة في Dockerfile - أو هل أنا في عداد المفقودين شيء؟) - warp
هل هذا شيء مختلف عن إصدارات عمال السفن القديمة / الأحدث ربما؟ من المؤكد أنه يدير نقطة الدخول بالنسبة لي: gist.github.com/warpr/26a5cc471dce7fcf9021 . هذا هو استخدام عامل ميناء 0.10.0 على أوبونتو 13.10. - warp
يمر -entrypoint يتجاوز نقطة الدخول. انظر الاجابة المعدلة - Panagiotis Moustafellos
وأنا أعلم مرور -entrypoint يتجاوز نقطة الدخول. ولكن عند استخدام --entrypoint ، كيف يمكنني تجاوز CMD لتكون فارغة؟ (بالنسبة لـ bash ، يمكنني استخدام شيء مثل i أو - login ، ولكن لن تحتوي كل نقاط الإدخال التي قد أريد استخدامها على وسيطة مكافئة "dumby"). - warp
على الأقل في Docker v1.11.1 يبدو أن تجاوز --entrypoint يمنع أيضًا الإلحاق العادي لـ CMD إلى نقطة الدخول. يبدو أن ذلك يحدث فقط عندما لا يتم تجاوز نقطة الإدخال. - Jasmine Hegman


نرى: https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

الجزء ذو الصلة:

CMD (الأوامر الافتراضية أو الخيارات) استدعاء سطر الأوامر الاختياري في سطر الأوامر Docker:

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

هذا الأمر اختياري نظرًا لأن الشخص الذي قام بإنشاء IMAGE قد يكون قد قام بالفعل بتوفير سطر الأوامر الافتراضي باستخدام Dockerfile CMD. كمشغل (الشخص الذي يقوم بتشغيل حاوية من الصورة) ، يمكنك تجاوز هذا CMD فقط عن طريق تحديد سطر جديد.

إذا كانت الصورة تحدد أيضًا ENTRYPOINT ، فسيتم إلحاق CMD أو COMMAND كوسيطة إلى ENTRYPOINT.

لذلك افعل ما تريده فقط تحديد كمد وتجاوز باستخدام /bin/bash. ليس تماما "فارغة" ، ولكن الحصول على هذه المهمة بنسبة 99 ٪.


19
2018-06-12 07:31



عفوا ، لقد أغفلت التفاصيل. باستثناء التقصير --loginإلى -l أعتقد أن الحل الخاص بك بالفعل جيد كما يحصل. - Simon Thum
هنا شيء ممتع رأيته اليوم: لا يتم تجاوز الأمر ، يتم إلحاقه. وهنا PS من داخل الحاوية. لاحظ أن الأمر الذي أضفته كان صدى "إعداد db" والأمر المدمج في / usr / bin / geth. أنا أيضا تعيين نقطة الدخول لتكون "". 1 ? Ssl 0:00 /usr/bin/geth echo setting up db - Paul S
لم يعد الارتباط المرجعي الخاص بـ docker يعمل - لا يمكن العثور على بديل واضح له. - Chris Kimpton
أنا فقط أصلحها ، لكنني أيضاً وجدت صعوبة في العثور عليها ؛ ( - Simon Thum


لأي شخص يقوم هنا بتجاوز نقطة الدخول وأمر لتمرير أمر آخر ، على سبيل المثال ، قم بتشغيل bash بدلاً من scriptpoint ثم قم بتشغيل الأمر الآخر مع المعلمات (لم يكن واضحًا لي من الإجابات الأخرى):

 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



فقط يجب أن تكون الأوامر shell addtion json تستند إلى الكتاب ، وذلك بدلا من الاقتباس مع اقتباسات واحدة '...' استخدم علامات الاقتباس المزدوجة "..." - Jimmy Obonyo Abor