שאלה כיצד ניתן לעקוף את CMD בעת הפעלת תמונת מעגן?


אני רוצה לבדוק את התמונה מעגן שנוצרו על ידי מישהו אחר עם entrypoint ו cmd שצוין, למשל:

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

כרגע אני:

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

האם יש דרך לעקוף CMD להיות ריק (אז אני לא צריך להשתמש "--login")?


83
2018-05-10 12:59






תשובות:


אתה יכול פשוט להיכנס דרך docker run -it --entrypoint=/bin/bash $IMAGE -i (אתה תשיק מיכל חדש מהתמונה ולקבל פגז bash במצב אינטראקטיבי), ולאחר מכן להפעיל את הפקודה entrypoint במיכל זה.

לאחר מכן תוכל לבדוק את מיכל פועל במצב זה צריך להיות פועל.

עריכה: מאז Docker 1.3 אתה יכול להשתמש exec כדי להפעיל תהליך במיכל פועל. הפעל את הכלי המכיל כפי שאתה עושה בדרך כלל ולאחר מכן הזן אותו על ידי הנפקת:

docker exec -it $CONTAINER_ID /bin/bash

בהנחה bash מותקן תינתן לך גישה פגז למיכל פועל.


92
2018-05-12 09:28



האם לא לבצע את זה "/ usr / sbin / apache2ctl / bin / bash"? (כי הדוגמה שלך לא לעקוף את נקודת הכניסה היא תשתמש entpoint מוגדר Dockerfile - או שאני חסר משהו?) - warp
האם זה משהו שונה עבור גרסאות העגינה הישן / חדש יותר אולי? זה בהחלט מפעיל את הכניסה לי: gist.github.com/warpr/26a5cc471dce7fcf9021 . זה משתמש במעגן 0.10.0 על אובונטו 13.10. - warp
עובר -entrypoint עוקפת את נקודת הכניסה. ראה את התשובה לעריכה - Panagiotis Moustafellos
אני יודע שחולפת - נקודת החריפה מעקפת את נקודת הכניסה. אבל כשאני משתמש --entrypoint, איך אני לעקוף CMD להיות ריק? (עבור bash אני יכול להשתמש במשהו כמו - i או - login, אבל לא כל נקודות הכניסה שאני אולי רוצה להשתמש תהיה המקבילה "דמה" הטיעון). - warp
לפחות ב- Docker v1.11.1 נראה כי דריסת ה- --entrypoint גם מונעת את ההוספה הרגילה של ה- CMD לנקודת הכניסה. זה רק נראה לקרות כאשר הכניסה אינה דוחה. - Jasmine Hegman


ראה: https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

חלק רלוונטי:

CMD (פקודת ברירת מחדל או אפשרויות) הזכר את הפקודה COMMAND האופציונלית בפקודה Docker:

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

פקודה זו היא אופציונלית מכיוון שהאדם שיצר את IMAGE כבר סיפק פקודת ברירת מחדל באמצעות ה- Dockerfile CMD. כמו מפעיל (אדם מפעיל מיכל מהתמונה), אתה יכול לעקוף את CMD רק על ידי ציון פקודה חדשה.

אם התמונה גם מציינת ENTRYPOINT אזי ה- CMD או COMMAND יוצגו כארגומנטים ל- ENTRYPOINT.

אז לעשות מה שאתה רוצה שאתה צריך רק לציין cmd, ולעקוף באמצעות /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
הקישור קישור מעגן לא עובד עוד - לא יכול למצוא תחליף ברור עבור זה. - Chris Kimpton
אני פשוט תיקנו את זה, אבל גם מצאתי את זה קשה למצוא ( - Simon Thum


לכל מי שמגיע לכאן כדי לעקוף את ערך הכניסה ואת הפקודה כדי להעביר פקודה אחרת, למשל. להפעיל את bash במקום script script ולאחר מכן להפעיל פקודה אחרת עם פרמטרים (לא היה ברור לי תשובות אחרות):

 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 צריך להיות מבוסס json כותב, אז במקום מצטט עם ציטוטים בודדים '...' להשתמש במרכאות כפולות "..." - Jimmy Obonyo Abor