Moby: Cara membuat builder RUN menggunakan / bin / bash sebagai ganti / bin / sh

Dibuat pada 28 Jul 2014  ·  11Komentar  ·  Sumber: moby/moby

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?

arebuilder kinquestion

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:

    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"]
    

Semua 11 komentar

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 format docker

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat