Nextflow가 "최신"Docker 이미지를 가져 오지 않음

Dec 14 2020

두 개의 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태그를 사용하고 있다는 사실과 관련이 있다는 것을 깨달았고, nextflow VM에 이미 latest라는 이미지가 있기 때문에 nextflow는 그 이미지를 사용하고 레지스트리를 확인하지 않습니다.

질문 : nextflow를 실행할 때마다 레지스트리에서 최신 이미지를 확인하도록하려면 어떻게해야합니까? 또는 다음 흐름 대신에 레지스트리를 확인하는 VM에서 실행할 수있는 스크립트 / 프로그램이 있습니까?

감사합니다.

답변

1 Steve Dec 14 2020 at 21:40

Nextflow는 .NET을 사용하여 컨테이너에서 명령을 실행합니다 docker run. 아직 가져 오지 않은 이미지를 지정하면에서 docker run먼저 docker pull이미지를 다운로드 / 현지화합니다. 최신 이미지가 있는지 레지스트리를 다시 확인하려면 docker pullNextflow를 실행하기 전에 (각 이미지에 대해) 호출해야합니다 . 대신 프로세스가 생성 될 때마다 레지스트리에서 최신 이미지를 확인하려면 아래를 참조하십시오.

몇 가지 조사 끝에 최신 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생성 된 각 프로세스에 대해 수행하는 오버 헤드 를 가지며 새 이미지가 레지스트리로 푸시되는시기에 따라 일부 프로세스가 워크 플로 실행 중에 다른 컨테이너를 가져올 수 있음을 의미 할 수 있습니다. '최신'용기 만 필요하고 재현성에 신경 쓰지 않는 경우에는 문제가되지 않을 수 있습니다.