Nextflow ไม่ดึงอิมเมจ Docker“ ล่าสุด”
ฉันใช้งาน VM สองเครื่อง VM หนึ่งเครื่องใช้สำหรับการเรียกใช้ nextflow บน VM อื่นมีเซิร์ฟเวอร์สร้าง Jenkins Jenkins รับผิดชอบในการสร้างอิมเมจ Docker ใหม่และพุชอิมเมจ Docker ใหม่ไปยังรีจีสทรีคอนเทนเนอร์ Google ส่วนตัวของเรา
nextflow.configไฟล์ของฉันมีลักษณะดังนี้:
process {
withLabel: awesome_image {
container = "eu.gcr.io/best-project-1234/coolest_os:latest"
}
}
หลังจากสร้างอิมเมจใหม่โดยใช้เซิร์ฟเวอร์ Jenkins ฉันกำลังเรียกใช้สคริปต์ nextflow ใหม่และฉันสังเกตเห็นว่า nextflow ยังคงใช้อิมเมจเก่าอยู่ หลังจากการวิจัยบางส่วน (https://stackoverflow.com/a/58539792/1820480) ฉันรู้ว่าสิ่งนี้เกี่ยวข้องกับความจริงที่ว่าฉันกำลังใช้latestแท็กและเนื่องจากมีภาพที่เรียกว่าล่าสุดใน VM ลำดับถัดไป Nextflow จึงใช้ภาพนั้นและไม่ต้องกังวลกับการตรวจสอบรีจิสทรี
คำถาม: ฉันจะแน่ใจได้อย่างไรว่าก่อนที่จะเรียกใช้ขั้นตอนถัดไปทุกครั้งจะตรวจสอบรีจิสทรีเพื่อหารูปภาพที่ใหม่กว่า หรือมีสคริปต์ / โปรแกรมที่ฉันสามารถเรียกใช้บน VM ที่ตรวจสอบรีจิสทรี (แทน Nextflow) ได้หรือไม่
ขอขอบคุณ.
คำตอบ
Nextflow เรียกใช้คำสั่งของคุณในคอนเทนเนอร์โดยใช้docker runไฟล์. หากคุณระบุรูปภาพที่คุณยังไม่ได้ดึงขั้นdocker runแรกให้docker pullทำการดาวน์โหลด / แปลรูปภาพ หากต้องการตรวจสอบรีจิสทรีอีกครั้งสำหรับรูปภาพที่ใหม่กว่าคุณต้องแน่ใจว่าคุณโทรหาdocker pull(สำหรับแต่ละภาพ) ก่อนเรียกใช้ Nextflow หากคุณต้องการตรวจสอบรีจิสทรีสำหรับรูปภาพที่ใหม่กว่าทุกครั้งที่เกิดกระบวนการโปรดดูด้านล่าง
หลังจากการวิจัยบางส่วนดูเหมือนว่า Docker cli (v20.10.0) ล่าสุดมีแฟล็กเพื่อแก้ไขพฤติกรรมการดึงเมื่อเรียกใช้คอนเทนเนอร์:
--pull string Pull image before running ("always"|"missing"|"never") (default "missing")
นี่เป็นสิ่งที่ดีเพราะหมายความว่าตอนนี้ควรจะผ่านสิ่งนี้ไปได้ในnextflow.config:
docker {
enabled = true
runOptions = '--pull=always'
}
แต่สิ่งนี้จะมีค่าใช้จ่ายในการทำdocker pullสำหรับแต่ละกระบวนการที่เกิดขึ้นและขึ้นอยู่กับว่าเมื่อใดที่อิมเมจใหม่ถูกพุชไปยังรีจิสทรีของคุณอาจหมายความว่ากระบวนการบางอย่างได้รับคอนเทนเนอร์ที่แตกต่างกันระหว่างการดำเนินการเวิร์กโฟลว์ของคุณ นี่อาจไม่ใช่เรื่องน่ากังวลแม้ว่าคุณจะต้องการแค่คอนเทนเนอร์ 'ล่าสุด' และไม่สนใจเรื่องการทำซ้ำ