“Docker原因”;其中一个命令以非零退出代码退出;请注意,snakemake使用bash严格模式&引用;用蛇毒
我在试着用snakemake操作一个docker集装箱。作业运行并产生正确的输出,但当它们完成时,我得到“Docker原因”;其中一个命令以非零退出代码退出;请注意,snakemake使用bash严格模式&引用;用蛇毒,docker,snakemake,Docker,Snakemake,我在试着用snakemake操作一个docker集装箱。作业运行并产生正确的输出,但当它们完成时,我得到 (one of the commands exited with non-zero exit code; note that snakemake uses bash strict mode!) snakemake试图删除这些文件 我尝试调试的东西: 将| | true、set+u或exit 0添加到规则中的shell命令 运行--printshellcmds中显示的命令(它们运行正常)
(one of the commands exited with non-zero exit code; note that snakemake uses bash strict mode!)
snakemake试图删除这些文件
我尝试调试的东西:
- 将
、| | true
或set+u
添加到规则中的shell命令exit 0
- 运行
中显示的命令(它们运行正常)--printshellcmds
- 将docker命令放在bash脚本中的“strict”模式下查看 如果有任何问题(没有)
- 打印实际出口
规则的
命令中的代码,它将打印0shell:
- 运行直接在容器中调用的R脚本 从蛇机(它工作良好)
- 将
添加到此处建议的docker运行命令:。这 失败,因为容器中的R脚本无处可写 容器中不正确存在作为当前用户的中间文件--user$(id-u):$(id-g)
rule run_biospyder:
input:
counts = "{dir}/{name}_counts.csv",
metadata = "{dir}/{name}_metadata.csv",
output: directory("{dir}/{name}_output")
params:
dockervol = "/usr/src/data"
shell:
"""
docker run \
-v $PWD:{params.dockervol} biospyderpipeline \
--config-file {params.dockervol}/config.yml \
--counts {params.dockervol}/{input.counts} \
--samples {params.dockervol}/{input.metadata} \
--output {params.dockervol}/{output} \
--name {wildcards.name}
"""
映射卷时,此问题是docker权限问题。问题似乎是由于容器内部以root用户身份运行(我正在开发),snakemake试图将
.snakemake\u timestamp
作为我的当前用户写入映射卷(由root用户拥有)的输出目录
我设法用以下方法修复了它:
入口点处的shell脚本创建具有相同id的用户,并运行与该用户相同的任何命令。这意味着映射的卷内容归用户所有,Snakemake可以在运行结束时写入。这也不会修复docker build中的用户id,因此任何人都可以使用它。映射卷时,该问题是docker权限问题。问题似乎是由于容器内部以root用户身份运行(我正在开发),snakemake试图将
.snakemake\u timestamp
作为我的当前用户写入映射卷(由root用户拥有)的输出目录
我设法用以下方法修复了它:
入口点处的shell脚本创建具有相同id的用户,并运行与该用户相同的任何命令。这意味着映射的卷内容归用户所有,Snakemake可以在运行结束时写入。这也不会修复docker构建中的用户id,因此任何人都可以使用它