Saya membuat skrip build Dockerfile dan ingin menggunakan perintah bash. RUN menggunakan / bin / sh secara default. Apakah ada cara untuk memberi tahu RUN agar menggunakan / bin / bash?
Tidak, ini hardcode ke "/ bin / sh -c"
Seseorang tentu saja dapat menautkan / bin / bash ke / bin / sh di langkah pembuatan sebelumnya.
Saya akhirnya mengubah skrip Dockerfile saya untuk menyalin file dan menggunakannya daripada menggunakan pengalihan yang telah saya gunakan di bash.
@dwatrous apakah Anda mencoba RUN ["echo", "hello"]
tidak akan dibungkus oleh /bin/sh
IIRC. Jadi jika Anda benar-benar menginginkan bash, Anda dapat memintanya: RUN ["/bin/bash", "-c", "echo hello all in one string"]
.
Beri tahu kami jika ini menyelesaikan masalah Anda.
bash dapat digunakan secara manual dengan menggunakannya dalam instruksi RUN
.
Tidak ada niat atau rencana untuk mengubahnya menjadi pesta.
Saya akan menandai ini sebagai masalah dokumen karena kami mungkin ingin mendokumentasikannya. Ini ketiga atau keempat kalinya pertanyaan ini muncul.
Ini dapat ditutup sekarang karena: https://github.com/docker/docker/pull/7489
jadi bagaimana ceritanya yang satu ini?
@ORESoftware Lihat diskusi di atas, dan https://github.com/moby/moby/pull/22489 , yang menambahkan instruksi SHELL
Dockerfile (Docker 1.12 dan yang lebih baru)
Jika Anda ingin menggunakan shell yang berbeda untuk satu RUN
, gunakan notasi Exec form (JSON) - seperti yang dibahas di atas:
RUN ["/bin/bash", "-c", "echo I am now using bash!"]
Jika Anda ingin mengubah shell default di image Anda (dan selama build), gunakan instruksi SHELL
Dockerfile yang diimplementasikan di https://github.com/moby/moby/pull/22489 :
SHELL ["/bin/bash", "-c"]
RUN echo I am now using bash!
Atau, kombinasi di atas
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"]
Saya tahu saya terlambat ke pesta dan ya ini bukan solusi terbaik, tetapi berhasil untuk apa yang saya butuhkan
Di file buruh pelabuhan saya setelah mengunduh dan mengekstrak SDK, saya menjalankan dua perintah ini
JALANKAN cp / bin / bash / bin / sh
JALANKAN echo "sumber ~ / google-cloud-sdk / path.bash.inc" >> ~ / .bashrc
RUN source ~ / .bashrc
Setelah itu, perintah gcloud akan tersedia selama pembuatan dan waktu proses
Bagi mereka yang tertarik dengan reproduktifitas OCI yang ketat, panggilan Dockerfile SHELL
tampaknya tidak ada dalam spesifikasi OCIv1, per podman 1.4:
LANGKAH 2: SHELL ["/ bin / bash", "-c"]
ERRO [0000] SHELL tidak didukung untuk format gambar OCI, [/ bin / bash -c] akan diabaikan. Harus menggunakan formatdocker
Pembaruan: Sepertinya thaJeztah benar, beberapa diskusi tentang mendukung fitur ini di buildah: https://github.com/containers/buildah/issues/507
Pembaruan2: BUILDAH_FORMAT=docker
untuk menyelamatkan
@qhaas tidak berpikir itu ada hubungannya dengan spesifikasi OCI, hanya implementasi buildah
Komentar yang paling membantu
@ORESoftware Lihat diskusi di atas, dan https://github.com/moby/moby/pull/22489 , yang menambahkan instruksi
SHELL
Dockerfile (Docker 1.12 dan yang lebih baru)Jika Anda ingin menggunakan shell yang berbeda untuk satu
RUN
, gunakan notasi Exec form (JSON) - seperti yang dibahas di atas:Jika Anda ingin mengubah shell default di image Anda (dan selama build), gunakan instruksi
SHELL
Dockerfile yang diimplementasikan di https://github.com/moby/moby/pull/22489 :Atau, kombinasi di atas