Nextflow Tidak Menarik Gambar Docker "terbaru"

Dec 14 2020

Saya menjalankan dua VM. Satu VM digunakan untuk menjalankan nextflow, di VM lain terdapat server build Jenkins. Jenkins bertanggung jawab untuk membuat image Docker baru dan mendorong image Docker baru ke registry container google pribadi kami.

nextflow.configFile saya terlihat seperti ini:

process {
    withLabel: awesome_image {
        container = "eu.gcr.io/best-project-1234/coolest_os:latest"
    }
}

Setelah membangun image baru menggunakan server Jenkins, saya menjalankan skrip nextflow baru dan saya perhatikan bahwa nextflow masih menggunakan image lama. Setelah beberapa penelitian (https://stackoverflow.com/a/58539792/1820480), Saya menyadari bahwa ini ada hubungannya dengan fakta bahwa saya menggunakan latesttag, dan karena sudah ada gambar yang disebut terbaru di VM nextflow, nextflow menggunakan yang itu dan tidak repot-repot memeriksa registri.

Pertanyaan: Bagaimana saya bisa memastikan bahwa sebelum setiap alur berikutnya, ia memeriksa registri untuk gambar yang lebih baru? Atau, apakah ada skrip / program yang dapat saya jalankan di VM yang memeriksa registri (bukan alur berikutnya)?

Terima kasih.

Jawaban

1 Steve Dec 14 2020 at 21:40

Nextflow hanya menjalankan perintah Anda dalam wadah menggunakan docker run. Jika Anda menentukan gambar yang belum Anda tarik, docker runpertama-tama lakukan a docker pulluntuk mengunduh / melokalkan gambar. Untuk memeriksa registri lagi untuk gambar yang lebih baru, Anda hanya perlu memastikan Anda memanggil docker pull(untuk setiap gambar) sebelum menjalankan Nextflow. Jika Anda ingin memeriksa registri untuk gambar yang lebih baru setiap kali proses muncul, lihat di bawah.

Setelah beberapa penelitian, sepertinya Docker cli terbaru (v20.10.0) sekarang memiliki flag untuk mengubah perilaku pull saat menjalankan container:

--pull string   Pull image before running ("always"|"missing"|"never") (default "missing")

Ini bagus karena itu berarti sekarang mungkin melewati ini melalui Anda nextflow.config:

docker {
    enabled = true
    runOptions = '--pull=always'
}

Tapi ini akan memiliki overhead melakukan docker pulluntuk setiap proses yang muncul dan, tergantung pada kapan gambar baru didorong ke registri Anda, mungkin berarti beberapa proses mendapatkan wadah yang berbeda selama eksekusi alur kerja Anda. Ini mungkin tidak menjadi perhatian jika Anda hanya membutuhkan wadah 'terbaru' dan tidak peduli untuk reproduktifitas.