Saya mencoba menjalankan skrip selama proses pembangunan saya di Dockerfile saya. Tapi sepertinya tidak berhasil.
Saya mencoba seperti itu:
FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]
Juga begini:
FROM php:7-fpm
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"
Dan juga menjalankan container saya yang sedang berjalan:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Sepertinya tidak ada yang berhasil.
Tahukah Anda bagaimana melakukannya?
docker
dockerfile
Kevin
sumber
sumber
bootstarp.sh
memiliki bit yang dapat dieksekusi?docker exec -it symfony bash
berada di dalam penampung, dapatkah Anda menjalankan skrip secara manual, dan memeriksa isinya? (cat bootstarp.sh
)?docker exec symfony /bin/bash /bootstarp.sh
dan beri tahu saya hasilnya.Jawaban:
RUN
danENTRYPOINT
dua cara berbeda untuk menjalankan skrip.RUN
berarti itu membuat penampung perantara, menjalankan skrip dan membekukan status baru penampung itu dalam gambar perantara baru. Skrip tidak akan dijalankan setelah itu: gambar akhir Anda seharusnya mencerminkan hasil dari skrip itu.ENTRYPOINT
berarti gambar Anda (yang belum mengeksekusi skrip) akan membuat wadah, dan menjalankan skrip tersebut.Dalam kedua kasus tersebut, skrip perlu ditambahkan, dan a
RUN chmod +x /bootstrap.sh
adalah ide yang bagus.Ini juga harus dimulai dengan shebang (seperti
#!/bin/sh
)Mempertimbangkan skrip Anda (
bootstarp.sh
: beberapagit config --global
perintah), akan lebih baik menggunakanRUN
skrip itu sekali di AndaDockerfile
, tetapi pastikan untuk menggunakan pengguna yang tepat (git config
file global%HOME%/.gitconfig
, yang secara default adalah/root
satu - satunya)Tambahkan ke Dockerfile Anda:
Kemudian, saat menjalankan penampung, periksa konten
/root/.gitconfig
untuk mengonfirmasi bahwa skrip telah dijalankan.sumber
bootstrap.sh
selainbootstarp.sh
: lihat stackoverflow.com/a/1254561/6309Selain jawaban di atas:
Jika Anda membuat / mengedit file skrip .sh Anda di Windows, pastikan file tersebut disimpan dengan baris yang diakhiri dengan format Unix . Secara default banyak editor di Windows akan mengubah akhiran baris Unix ke format Windows dan Linux tidak akan mengenali shebang (#! / Bin / sh) di awal file. Jadi Linux akan menghasilkan pesan error seperti jika tidak ada shebang.
Tips:
sumber
Cobalah untuk membuat skrip dengan
ADD
perintah dan spesifikasi direktori kerja Seperti ini ("skrip" adalah nama skrip dan/root/script.sh
berada di tempat yang Anda inginkan dalam wadah, jalurnya dapat berbeda:Dalam hal
ADD
ini harus datang sebelumnyaCMD
, jika Anda memiliki satu BTW, cara yang keren untuk mengimpor skrip ke lokasi mana pun dalam wadah dari mesin hostDi
CMD
tempat[./script]
Ini harus secara otomatis menjalankan skrip Anda
Anda juga dapat menentukan
WORKDIR
sebagai/root
, lalu Anda akan otomatis ditempatkan di root, saat memulai penampungsumber
script.sh
script.sh
relatif terhadapDockerfile
Ini praktik terbaik untuk digunakan
COPY
daripadaADD
saat Anda menyalin dari sistem file lokal ke gambar. Juga, saya akan merekomendasikan membuat sub-folder untuk menempatkan konten Anda. Jika tidak ada yang lain, itu membuat semuanya rapi. Pastikan Anda menandai skrip sebagai dapat dieksekusi menggunakanchmod
.Di sini, saya membuat
scripts
sub-folder untuk menempatkan skrip saya dan menjalankannya dari:sumber