标签: singularity-container

awk 命令在 snakemake --use-singularity 中失败

我正在尝试将 Snakemake 与 Singularity 结合起来,并且我注意到awk在使用 Singularity 时一个简单的命令不再起作用。在$1最后一行被取代的bash,而不是被用来作为第一个字段awk

这是一个最小的工作示例(Snakefile):

singularity: "docker://debian:stretch"
rule all:
    input: "test.txt"
rule test:
    output: 
        "test.txt"
    shell:
        "cat /etc/passwd | awk -F':' '{{print $1}}' > {output}"
Run Code Online (Sandbox Code Playgroud)

当我在snakemake没有奇点的情况下运行时,输出test.txt看起来如预期(仅包含用户名)。当我运行时snakemake --use-singularity,文件包含整行,例如root:x:0:0:root:/root:/bin/bash.

这是 Snakemake 的日志:

$ snakemake --use-singularity --printshellcmd                                                                                                               
Building DAG of jobs...
Using shell: /usr/bin/bash
Provided cores: 1
Rules claiming more threads will be scaled down.
Job counts:
        count   jobs
        1       all
        1       test
        2 …
Run Code Online (Sandbox Code Playgroud)

bash snakemake singularity-container

4
推荐指数
1
解决办法
3102
查看次数

在 Nextflow 中执行 Singularity 容器时激活 conda 环境

我正在使用 Singularity 容器来运行来自 Nextflow 工作流管理系统的命令。我在 Singularity 中有一个 conda 环境,当我进入容器时可以激活它

singularity pull shub://brucemoran/Singularity:pcgr.centos7
singularity shell brucemoran-Singularity-pcgr.centos7.img
#<inside container>
source activate pcgr
Run Code Online (Sandbox Code Playgroud)

当 Nextflow 执行时,我已经定义了source activate pcgr我认为应该激活 conda env 的位置。但我收到unbound variable HOST警告。我认为这与未激活和随后使用变量有关,如果环境已激活,则应定义这些变量(?)。

我希望容器在执行时激活 env (pcgr)。我尝试过

%run
 source activate pcgr 
Run Code Online (Sandbox Code Playgroud)

%post
 source activate pcgr
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用

singularity exec pcgr.img which pcgr.py
which: no pcgr.py in ...
Run Code Online (Sandbox Code Playgroud)

我看不出这是如何完成的,但假设这很容易,而且我严重忽略了一些事情!

帮助表示赞赏。

conda singularity-container

4
推荐指数
1
解决办法
3706
查看次数

从 Nipype docker 镜像 CommandNotFound 构建奇点配方

我有以下奇点容器配方:

#!/bin/bash

Bootstrap: docker
From: nipype/nipype:latest

%labels
  Version v1.0

%post
  # Install nano
  apt-get update
  apt-get install nano

  # Set up Python environment
  CONDA_ENV=/opt/conda/bin
  export PATH=$CONDA_ENV:$PATH
  chmod -R 777 $CONDA_ENV

  # Activate conda environment
  conda activate neuro
  conda install seaborn
  pip install pybids
Run Code Online (Sandbox Code Playgroud)

我用 Singularity 构建容器,如下所示:

sudo singularity build swish.simg Singularity.swish

依赖项的安装和大部分构建都进展顺利,直到我遇到错误source not found。重申一下这个问题和我所尝试过的:

  • 我正在根据食谱构建 Nipype 图像。在 %post 中,我想将两个额外的软件包(seaborn 和 pybids)安装到“neuro”conda 环境中。
  • 但是,当我尝试激活 %post 中的神经环境(“源激活神经”)时,我不断收到一条错误消息,指出未找到命令“源”。
  • 我想使用 bash 运行 %post 中的命令,但不确定在哪里指定它。

nipype conda singularity-container

3
推荐指数
1
解决办法
699
查看次数

奇点:镜像、容器和实例之间有什么区别?

我开始学习奇点以对科学管道进行可重复的分析。一位同事解释说,图像用于实例化容器。然而,在阅读文档和教程时,也使用了该术语,并且和instance的用法似乎有些可以互换。因此,我不确定我是否准确理解了图像、容器和实例之间的区别。我确实知道菜谱是用于构建其中一个的文本文件(我认为是图像?)。imagecontainer

例如,在此页面上解释:

现在我们可以将定义文件构建成图像!只需运行一下build ,图像就可以使用了:

$ sudo singularity build url-to-pdf-api.img Singularity
Run Code Online (Sandbox Code Playgroud)

好的,所以这使用配方Singularity来构建图像,并具有.img. 但是,该build命令的帮助说明指出:

$ 奇点帮助构建

用法:奇点 [...] 构建 [构建选项...]

构建命令根据配方(定义文件)或基于 URI、位置或存档来编译容器。

那么这似乎表明我们正在构建一个容器?

然后,还有imageinstance子命令。

所有这些术语都可以互换使用吗?似乎有时它们是这样,有时它们之间又存在差异。

singularity-container

3
推荐指数
1
解决办法
3061
查看次数

在沙盒中哪里可以找到奇点定义文件

我正在尝试学习奇点,所以我从他们的库中提取了这个例子:

singularity pull library://sylabsed/examples/lolcow
Run Code Online (Sandbox Code Playgroud)

拉出后,我想检查该图像内的目录是什么,以及是否有任何用于构建图像的定义文件,因此我通过构建一个进入开发模式sandbox

sudo singularity build --sandbox lowcow/ library://sylabsed/examples/lolcow
Run Code Online (Sandbox Code Playgroud)

检查目录后,lowcow/我没有找到任何奇点.def定义文件。

有人可以向我解释一下是否可以在 中找到定义文件吗sandbox

singularity-container

3
推荐指数
1
解决办法
919
查看次数

无法构建可写奇点容器

我正在尝试使用该命令构建一个可写奇点容器sudo singularity build --writable my_container.img docker://image_name,但出现错误Error for command "build": unknown flag: --writable

我决定遵循 Singularity(此处)的指南,看看是否能找到我的问题。我正在使用该命令sudo singularity build --writable lolcow.img shub://GodloveD/lolcow,但遇到了同样的错误Error for command "build": unknown flag: --writable

我使用的是奇点版本 3.6.4。

有人知道会发生什么吗?

singularity-container

3
推荐指数
1
解决办法
4868
查看次数

docker工作目录和singularity的区别

我有一个关于 docker 和奇点的非常基本的问题。我希望能够使用 docker 和奇异性来运行 docker 容器,但我对工作目录之间的差异感到困惑。这是一个示例:在我的 docker 容器内,我有main.shtest.sh

内容main.sh

#!/bin/bash

echo "Executing main.sh"
./test.sh
Run Code Online (Sandbox Code Playgroud)

内容test.sh

#!/bin/bash

echo "Executing test.sh"
Run Code Online (Sandbox Code Playgroud)

当执行以下命令时: sudo docker run -t myuser/mydocker:1.0 ./main.sh

我得到预期的输出:

Executing main.sh
Executing test.sh
Run Code Online (Sandbox Code Playgroud)

但是执行时singularity exec -e docker://myuser/mydocker:1.0 /main.sh

我收到此错误:

Executing main.sh
/main.sh: line 4: ./test.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)

为什么test.sh无法访问?有没有办法让它通过奇点而不改变 的内容main.sh?我的奇点版本是3.6.3。

谢谢你!

docker singularity-container

3
推荐指数
1
解决办法
3791
查看次数

ImageMagick 在 Singularity 容器内转换 OOMing

当我在 Singularity 容器内运行特定的 ImageMagick 转换命令(以生成动画 GIF)时,它始终给出内存错误:

\n
convert-im6.q16: cache resources exhausted `foo.gif' @ error/cache.c/OpenPixelCache/4083.\nconvert-im6.q16: memory allocation failed `foo.gif' @ error/quantize.c/AssignImageColors/496.\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何调试这个?

\n

我在 Singularity 之外没有遇到任何内存问题,这给我的印象是 Singularity 人为地限制了我的可用内存,或者 ImageMagick 在 Singularity 内部配置不当。我没有看到在 Singularity 中运行的任何其他应用程序出现内存问题,这让我认为这是 ImageMagick 问题。

\n

以下是有关我的系统的一些详细信息:

\n
$ singularity --version\nsingularity version 3.7.1-1.el8\n
Run Code Online (Sandbox Code Playgroud)\n

容器内部:

\n
Singularity> convert --version\nVersion: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org\nCopyright: \xc2\xa9 1999-2019 ImageMagick Studio LLC\nLicense: https://imagemagick.org/script/license.php\nFeatures: Cipher DPC Modules OpenMP \nDelegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma …
Run Code Online (Sandbox Code Playgroud)

imagemagick out-of-memory singularity-container

3
推荐指数
1
解决办法
1732
查看次数

是否可以从 Dockerfile 创建 Singularity 镜像?

我安装了奇点。在我的存储库中,我有 Dockerfile。我想从该 Dockerfile 创建一个 SIF(奇点图像)。我尝试查看文档并检查docker build选项,但它不包含 Dockerfile 的选项。是否可以从 Dockerfile 创建 SIF 映像?就像是:

Singularity build test.sif Dockerfile 
Run Code Online (Sandbox Code Playgroud)

docker singularity-container

3
推荐指数
1
解决办法
2206
查看次数

从 Apt 存储库安装特定版本的 R

R 志愿者目前维护 R ~3.5 和 ~4.0 的 Ubuntu 软件包存储库。对于仿生海狸,这些是:

我正在构建单独的 Singularity 容器,我需要在其中安装非常特定版本的 R;这些存储库似乎提供了这些内容。具体来说,我希望构建包含 R 版本 3.6.1、4.0.3 和 4.1.0 的容器;每个版本一个容器。

我在容器构建脚本中执行此操作,首先添加适当的 Apt 源,然后使用固定版本运行安装。我注意到,只有使用包存储库中列出的精确版本号并且包含r-recommended在同一版本中,我才能让它运行。例如,对于 R 3.6.1:

apt install -y r-base=3.6.1-3bionic r-recommended=3.6.1-3bionic
Run Code Online (Sandbox Code Playgroud)

这将正确安装r-baser-recommended在给定的版本上。然而,当我运行容器化 R 时,R 实际上报告自己处于这些存储库提供的最新版本(分别为 3.6.3、4.1.0 和 4.1.0)。据推测,如果r-base是正确的,这甚至可能表明它们处于破碎状态。

查看 Apt 的输出,很明显许多其他r-*软件包默认为最新版本,而不是我指定的版本。为了解决这个问题,我尝试在所有默认为最新版本的包上显式设置版本。再次以 R 3.6.1 为例:

apt install -y r-base=3.6.1-3bionic \
               r-base-core=3.6.1-3bionic \
               r-base-dev=3.6.1-3bionic \
               r-base-html=3.6.1-3bionic \
               r-doc-html=3.6.1-3bionic \
               r-recommended=3.6.1-3bionic
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用,抱怨与它尝试安装的其他包(r-cran-*packages,IIRC)发生冲突。

我不知道这是 Apt 的东西、R 的东西还是与他们的存储库有关的东西。有没有办法可以从官方来源安装这些特定版本,而无需自己构建任何东西?(如果不是,他们将旧版本保留在存储库中有何意义?)

ubuntu apt r singularity-container

3
推荐指数
1
解决办法
3722
查看次数

如何在HPC集群上运行奇点容器?- 错误:无法创建用户命名空间:用户命名空间已禁用

我正在尝试在 HPC 集群上启动奇点容器。我一直在本地运行projectNetv2.sif 和沙箱,没有任何问题。将它们导出到 HPC 后,出现以下错误。

(singularity) [me@hpc Project]$ ls
examples  projectnet_image_v2.tar.gz  projectnet_sandboxv2  projectNetv2.sif
(singularity) [me@hpc Project]$ singularity run projectNetv2.sif
INFO:    Converting SIF file to temporary sandbox...
FATAL:   while extracting SimNetv21.sif: root filesystem extraction failed: extract command failed: ERROR  : Failed to create user namespace: user namespace disabled
: exit status 1

##Attempting to run sandbox
(singularity) [me@hpc Project]$ singularity run projectnet_sandboxv2/
ERROR  : Failed to create user namespace: user namespace disabled
Run Code Online (Sandbox Code Playgroud)

谁能建议我如何启用用户命名空间?或者在没有用户名空间的情况下运行 sif,因为我没有 sudo 权限。

sudo hpc docker dockerfile singularity-container

3
推荐指数
1
解决办法
2786
查看次数

如何在奇点构建中利用主机缓存?

我正在寻找优化奇点 HPC 容器构建时间的方法。我知道通过逐层构建它们可以节省一些时间。但仍然有优化的空间。

我感兴趣的是使用/缓存主机系统上有意义的任何内容。

  1. CCache 用于 C++ 构建工件缓存
  2. git 仓库克隆
  3. APT包下载

我做了一些实验,但在任何一点上都没有成功。

到目前为止我发现了什么:

缓存

我在容器中安装 ccache 并指示构建系统使用它。我知道因为我正在使用singularity buildsudo 运行,所以缓存将位于/root. 但运行构建后,/root/.ccache却是空的。我验证了生成的 CMake 构建文件,它们肯定使用了 ccache。

我什至创建了一个测试配方,其中包含%post

touch "$HOME/.ccache/test"
Run Code Online (Sandbox Code Playgroud)

但测试文件没有出现在主机系统上的任何地方(不在/root我用户的家中)。构建步骤是否挂载容器支持的目录而/root不是主机的根目录?

使用 ccache 还需要做些什么吗?

git

人们建议运行例如 git-cache-http-server (/sf/answers/3055053571/)并使用git config --global url."http://gitcache:1234/".insteadOf https://.

由于奇点可以读取主机文件系统的部分内容,我认为甚至可以有一种方法让它在没有代理程序的情况下工作。但是,如果主机 git 存储库不在$HOMEor内部/tmp,奇点如何在构建期间访问它们?singularity build没有--bind标志来指定其他安装目录。使用%files配方中的部分听起来效率很低 - 每次运行构建时都要复制所有内容。

易于

人们建议使用例如squid-deb-proxy(https://gist.github.com/dergachev/8441335)。同样,由于奇点能够读取主机文件系统文件,我想只利用主机的/var/cache/apt. 但/var默认情况下并没有挂载到容器上。/var/cache/apt那么同样的问题又来了——如何在容器构建期间挂载。总体而言这是一个好主意吗?鉴于主机和容器都基于相同版本的 …

caching ccache singularity-container

0
推荐指数
1
解决办法
1348
查看次数