Saya memiliki beberapa RUN
perintah di Dockerfile saya yang ingin saya jalankan -no-cache
setiap kali saya membangun image Docker.
Saya mengerti docker build --no-cache
akan menonaktifkan caching untuk seluruh Dockerfile.
Apakah mungkin untuk menonaktifkan cache untuk perintah RUN tertentu?
Jawaban:
Selalu ada opsi untuk memasukkan beberapa perintah yang tidak berarti dan murah untuk dijalankan sebelum wilayah tempat Anda ingin menonaktifkan cache.
Seperti yang diusulkan dalam komentar masalah ini , seseorang dapat menambahkan blok argumen build (nama dapat berubah-ubah):
sebelum region tersebut, dan ubah nilainya masing-masing dengan menambahkan
--build-arg CACHEBUST=$(date +%s)
sebagaidocker build
argumen (nilai juga bisa berubah-ubah, ini adalah datetime saat ini, untuk memastikan keunikannya di seluruh proses).Ini tentu saja akan menonaktifkan cache untuk semua blok berikut juga, karena jumlah hash dari gambar perantara akan berbeda, yang membuat cache yang benar-benar selektif menonaktifkan masalah yang tidak sepele, dengan mempertimbangkan cara kerja buruh pelabuhan saat ini.
sumber
---> Using cache
bawah baris `` ARG CACHEBUST = 1` saya ... (dan ya saya lakukan--build-arg CACHEBUST=$(date +%s)
di perintah buruh pelabuhan saya)RUN echo "$CACHEBUST"
karena hanya menggunakanARG
tidak akan membatalkan cacheMenggunakan
sebelum baris RUN yang ingin Anda jalankan selalu. Ini berfungsi karena ADD akan selalu mengambil file / URL dan URL di atas menghasilkan data acak pada setiap permintaan, Docker kemudian membandingkan hasilnya untuk melihat apakah dapat menggunakan cache.
Saya juga telah menguji ini dan berfungsi dengan baik karena tidak memerlukan argumen baris perintah Docker tambahan dan juga berfungsi dari file Docker-compose.yaml :)
sumber
Tidak secara langsung tetapi Anda dapat membagi Dockerfile Anda menjadi beberapa bagian, membangun sebuah image, kemudian DARI gambar ini di awal Dockerfile berikutnya, dan membangun image dengan atau tanpa caching
sumber
Pada Februari 2016, hal itu tidak memungkinkan.
Fitur tersebut telah diminta di GitHub
sumber
fitur tersebut ditambahkan seminggu yang lalu.
https://github.com/moby/moby/issues/1996#issuecomment-550020843
sumber
Saya percaya ini sedikit perbaikan dari jawaban @ steve, di atas:
Ini menggunakan cache Docker dari git clone, tetapi kemudian menjalankan pembaruan repositori yang tidak di-cache.
Ini muncul untuk bekerja, dan lebih cepat - tetapi banyak terima kasih kepada @ Steve untuk menyediakan prinsip-prinsip yang mendasari.
sumber
Retas cepat lainnya adalah menulis beberapa byte acak sebelum perintah Anda
menulis 5 byte acak yang akan memaksa cache tidak ditemukan
sumber