Tob*_*s G 5 workflow pipeline docker
我试图在使用 CWL 时将一堆非常大的文件放入 docker 容器中。当使用默认的文件输入方法时
工作.yml:
input_file:
class: File
path: /home/ubuntu/data/bigfile.zip
Run Code Online (Sandbox Code Playgroud)
CWL 运行程序以某种方式复制文件并卡住。有没有一种简单的方法可以将目录直接安装到 docker 容器中?
任务.cwl:
cwlVersion: cwl:draft-3
class: CommandLineTool
baseCommand: run.sh
hints:
- class: DockerRequirement
dockerImageId: name123
inputs:
- id: input_file
type: File
inputBinding:
position: 1
outputs: []
Run Code Online (Sandbox Code Playgroud)
提前致谢!
CWL 用户指南有一个如何执行此操作的示例:https ://www.commonwl.org/user_guide/15-staging/index.html
您可以使用InitialWorkDirRequirement
输入文件并将其添加到要在工作目录中暂存的文件列表中,如下所示:
cwlVersion: v1.0
class: CommandLineTool
baseCommand: cat
hints:
DockerRequirement:
dockerPull: alpine
inputs:
in1:
type: File
inputBinding:
position: 1
valueFrom: $(self.basename)
requirements:
InitialWorkDirRequirement:
listing:
- $(inputs.in1)
outputs:
out1: stdout
Run Code Online (Sandbox Code Playgroud)
当您运行此程序时,例如使用 CWL 参考运行程序 ( cwltool
),您可以看到输入文件直接安装在工作目录中(但安全地以只读模式安装):
[job step-staging.cwl] /private/tmp/docker_tmpIaCJQ8$ docker \
run \
-i \
--volume=/private/tmp/docker_tmpIaCJQ8:/XMOiku:rw \
--volume=/private/tmp/docker_tmpW2RR3v:/tmp:rw \
--volume=/Users/kghose/Work/code/conditional/runif-examples/wf1.cwl:/XMOiku/wf1.cwl:ro \
--workdir=/XMOiku \
--read-only=true \
--log-driver=none \
--user=501:20 \
--rm \
--env=TMPDIR=/tmp \
--env=HOME=/XMOiku \
--cidfile=/private/tmp/docker_tmpdV6afe/20190502114327-207989.cid \
alpine \
cat \
wf1.cwl > /private/tmp/docker_tmpIaCJQ8/f3c708b20abf7fbf7f089060ec071c0956eb0cfd
Run Code Online (Sandbox Code Playgroud)
然而,正如 @TheDudeAbides 所说,CWL 1.0 的行为是挂载文件而不是复制它们。因此,即使您没有暂存它们,它们也会被安装以使它们可供容器使用,只是在不同的目录中。这就是 cwltool、toil 和 SBG 平台的工作原理。
归档时间: |
|
查看次数: |
1007 次 |
最近记录: |