【问题标题】:Docker causes "one of the commands exited with non-zero exit code; note that snakemake uses bash strict mode!" with SnakemakeDocker 导致“以非零退出代码退出的命令之一;请注意,snakemake 使用 bash 严格模式!”与蛇人
【发布时间】:2021-02-19 22:21:26
【问题描述】:

我正在尝试从snakemake 运行一个docker 容器。作业运行并产生正确的输出,但是当它们完成时,我得到了

(one of the commands exited with non-zero exit code; note that snakemake uses bash strict mode!)

snakemake 会尝试删除文件。

我尝试调试的内容:

  • 在规则中的shell命令中添加|| trueset +uexit 0

  • 运行--printshellcmds 中显示的命令(它们运行良好)

  • 在“严格”模式下将 docker 命令放入 bash 脚本中以查看 如果有任何问题(没有)

  • 打印实际出口 规则的shell: 命令中的代码并打印 0

  • 运行直接在容器中调用的 R 脚本 从snakemake(它工作正常)

  • --user $(id -u):$(id -g) 添加到此处建议的 docker run 命令:Snakemake claims rule exits with non-zero exit code, even with "|| true"?。这 失败,因为容器中的 R 脚本无处可写 中间文件,因为我当前的用户在容器中不正确存在

这是蛇文件规则:

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 snakemake


    【解决方案1】:

    问题是映射卷时的 docker 权限问题。问题似乎是由于内部容器以 root 身份运行(我只是在开发),并且 snakemake 尝试将 .snakemake_timestamp 作为我当前的用户写出到映射卷的输出目录(由 root 拥有)。

    我设法解决了这个问题:https://denibertovic.com/posts/handling-permissions-with-docker-volumes/

    入口点的 shell 脚本创建一个具有相同 id 的用户,并以该用户的身份运行任何命令。这意味着映射的卷内容归用户所有,并且 Snakemake 可以在运行结束时对其进行写入。这也不会修复 docker build 中的用户 ID,因此任何人都可以使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2020-10-28
      • 1970-01-01
      • 2021-12-10
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多