أنا أقوم بإنشاء نص برمجي لبناء Dockerfile وأود استخدام أوامر bash. يستخدم RUN / bin / sh افتراضيًا. هل هناك طريقة ما لإخبار RUN باستخدام / bin / bash بدلاً من ذلك؟
لا ، هذا ثابتًا إلى "/ 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
التعليق الأكثر فائدة
ORESoftware راجع المناقشة أعلاه ، و https://github.com/moby/moby/pull/22489 ، الذي أضاف تعليمة Dockerfile
SHELL
(Docker 1.12 وما فوق)إذا كنت تريد استخدام غلاف مختلف لـ
RUN
، فاستخدم تدوين نموذج Exec (JSON) - كما تمت مناقشته أعلاه:إذا كنت ترغب في تغيير الغلاف الافتراضي في صورتك (وأثناء الإنشاء) ، فاستخدم تعليمات Dockerfile
SHELL
التي تم تنفيذها في https://github.com/moby/moby/pull/22489 :أو مزيج مما ورد أعلاه