我正在尝试使用CWL将一堆非常大的文件放入docker容器中。通过
使用文件输入的默认方法时job.yml:
input_file:
class: File
path: /home/ubuntu/data/bigfile.zip
CWL跑步者以某种方式复制文件并被卡住。是否有一种简单的方法可以直接将目录安装到docker容器中?
task.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: []
提前致谢!
答案 0 :(得分:0)
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
运行此命令时,例如使用CWL参考运行程序(cwltool
),您会看到输入文件直接安装在工作目录中(但安全地处于ReadOnly模式):
[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
但是,正如@TheDudeAbides所说,CWL 1.0的行为是挂载文件而不是复制文件。因此,即使您没有暂存它们,也将挂载它们以使它们可用于容器,只是在另一个目录中。这就是cwltool,toil和SBG平台的工作方式。