Moby: كيفية جعل الباني RUN يستخدم / bin / bash بدلاً من / bin / sh

تم إنشاؤها على ٢٨ يوليو ٢٠١٤  ·  11تعليقات  ·  مصدر: moby/moby

أنا أقوم بإنشاء نص برمجي لبناء Dockerfile وأود استخدام أوامر bash. يستخدم RUN / bin / sh افتراضيًا. هل هناك طريقة ما لإخبار RUN باستخدام / bin / bash بدلاً من ذلك؟

arebuilder kinquestion

التعليق الأكثر فائدة

ORESoftware راجع المناقشة أعلاه ، و https://github.com/moby/moby/pull/22489 ، الذي أضاف تعليمة Dockerfile SHELL (Docker 1.12 وما فوق)

  • إذا كنت تريد استخدام غلاف مختلف لـ RUN ، فاستخدم تدوين نموذج Exec (JSON) - كما تمت مناقشته أعلاه:

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • إذا كنت ترغب في تغيير الغلاف الافتراضي في صورتك (وأثناء الإنشاء) ، فاستخدم تعليمات Dockerfile SHELL التي تم تنفيذها في https://github.com/moby/moby/pull/22489 :

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • أو مزيج مما ورد أعلاه

    FROM ubuntu
    RUN echo I am using the default (/bin/sh)
    RUN ["/bin/bash", "-c", "echo I am using bash"]
    SHELL ["/bin/bash", "-c"]
    RUN echo I am using bash, which is now the default
    RUN ["/bin/sh", "-c", "echo I am using /bin/sh"]
    RUN ["echo", "I don't use a shell at all"]
    

ال 11 كومينتر

لا ، هذا ثابتًا إلى "/ bin / sh -c"
يمكن للمرء بالطبع ربط / bin / bash بـ / bin / sh في خطوة بناء سابقة.

انتهى بي الأمر بتغيير البرنامج النصي Dockerfile لنسخ ملف واستخدامه بدلاً من استخدام إعادة التوجيه التي كنت أستخدمها في bash.

dwatrous هل جربت RUN ["echo", "hello"] لن يتم تغليفه بـ /bin/sh IIRC. لذلك إذا كنت تريد bash تمامًا ، فيمكنك استدعائها: RUN ["/bin/bash", "-c", "echo hello all in one string"] .
دعنا نعرف اذا كان يحل مشكلتك

يمكن استخدام bash يدويًا باستخدامه في تعليمات RUN .

ليس هناك نية أو خطة لجعل من الممكن تغييرها إلى bash.

سأضع علامة على هذا باعتباره مشكلة مستند لأننا قد نرغب في توثيق ذلك. إنها المرة الثالثة أو الرابعة التي يظهر فيها هذا السؤال.

العلاقات العامة: https://github.com/docker/docker/pull/7489

يمكن إغلاق هذا الآن بسبب: https://github.com/docker/docker/pull/7489

فما قصة هذا؟

ORESoftware راجع المناقشة أعلاه ، و https://github.com/moby/moby/pull/22489 ، الذي أضاف تعليمة Dockerfile SHELL (Docker 1.12 وما فوق)

  • إذا كنت تريد استخدام غلاف مختلف لـ RUN ، فاستخدم تدوين نموذج Exec (JSON) - كما تمت مناقشته أعلاه:

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • إذا كنت ترغب في تغيير الغلاف الافتراضي في صورتك (وأثناء الإنشاء) ، فاستخدم تعليمات Dockerfile SHELL التي تم تنفيذها في https://github.com/moby/moby/pull/22489 :

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • أو مزيج مما ورد أعلاه

    FROM ubuntu
    RUN echo I am using the default (/bin/sh)
    RUN ["/bin/bash", "-c", "echo I am using bash"]
    SHELL ["/bin/bash", "-c"]
    RUN echo I am using bash, which is now the default
    RUN ["/bin/sh", "-c", "echo I am using /bin/sh"]
    RUN ["echo", "I don't use a shell at all"]
    

أعلم أنني تأخرت في الحفلة ونعم ليس هذا هو الحل الأفضل ، لكنه نجح فيما احتاجه

في ملف docker الخاص بي بعد تنزيل SDK واستخراجها ، قمت بتشغيل هذين الأمرين

تشغيل cp / bin / bash / bin / sh
RUN echo "source ~ / google-cloud-sdk / path.bash.inc" >> ~ / .bashrc
مصدر RUN ~ /

بعد ذلك يكون الأمر gcloud متاحًا أثناء الإنشاء ووقت التشغيل

بالنسبة للمهتمين بإمكانية تكرار نتائج OCI الصارمة ، لا يبدو أن استدعاء Dockerfile SHELL موجود في مواصفات OCIv1 ، لكل podman 1.4:

الخطوة 2: SHELL ["/ bin / bash"، "-c"]
ERRO [0000] SHELL غير مدعوم لتنسيق صورة OCI ، سيتم تجاهل [/ bin / bash -c]. يجب استخدام تنسيق docker

تحديث: يبدو أن thaJeztah صحيح ، بعض المناقشات بشأن دعم هذه الميزة في buildah: https://github.com/containers/buildah/issues/507

التحديث 2: BUILDAH_FORMAT=docker للإنقاذ

qhaas لا تعتقد أن هذا له علاقة بمواصفات OCI ، فقط تنفيذ buildah

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات