标签: singularity-container

在Singularity中运行Docker镜像时绑定端口

我目前正在开发一个分布式图形处理平台,该平台在docker容器内维护一个Akka集群,并且最近被授予访问大型集群的权限以进行测试.不幸的是,这个集群不运行docker,只有奇点.

最初这似乎不是一个问题,因为奇点支持docker图像,但是,由于Akka集群的性质,我必须通过几个环境变量并绑定几个端口.例如,系统中的"分区管理器"将使用以下命令运行:

docker run -p $PM0Port:2551  --rm -e "HOST_IP=$IP" -e "HOST_PORT=$PM0Port" -v $entityLogs:/logs/entityLogs $Image partitionManager $PM0ID $NumberOfPartitions $ZooKeeper
Run Code Online (Sandbox Code Playgroud)

通过查看Singularity文档,我可以看到我可以创建一个'Singularity'文件并指定环境变量,但似乎没有关于绑定自定义端口的任何文档.它也没有解释我如何将参数传递给默认入口点(该项目是使用'sbt docker:publish'编译的,所以我不确定它将在何处重新分配它).

即使这是解决方案,因为有多个actor类型(以及每个类型的几个实例),它会出现指定环境变量,文档中的端口需要模板化,在运行时创建文件,以及为每个单独的actor构建图像.

我确信我已经完全错过了一个页面,它可以很好地将这个docker命令转换成等效的奇点,但我找不到它.

networking containers docker singularity-container

5
推荐指数
1
解决办法
988
查看次数

将 docker tar 文件转换为奇异图像?

我是 Docker 和 Singularity 的新手。我最近创建了规范的main.c.

#include <stdio.h>
#include <stdlib.h>

int main(void){
    printf("Hello Docker World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我静态编译了这段代码,即

gcc -static -static-libgcc -static-libstdc++ -o hello main.c
Run Code Online (Sandbox Code Playgroud)

然后我构建了docker镜像并可以运行它,即

dockerd &  ## Start Docker daemon
docker build --tag hello .
docker run hello   ## Outputs "Hello Docker World"
Run Code Online (Sandbox Code Playgroud)

然后我保存图像,以便我可以将其导出到第二台计算机(它没有 docker,但确实有奇点),即

docker save hello > hello.tar
Run Code Online (Sandbox Code Playgroud)

现在在第二台没有 docker 但有奇点的机器上,我想创建一个奇点图像。奇点文档给出了从 Docker Hub 上的 docker 镜像创建奇点镜像的说明,但没有给出从 docker tar 文件转换的说明。

问题:我将如何从我的图像中创建一个奇点图像 hello.tar

docker singularity-container

5
推荐指数
2
解决办法
2343
查看次数

如何使用奇点图像运行 jupyter notebook?

我已经构建了一个包含最新 anaconda 版本的奇异图像 (jupyter.sif),我想用它来运行 jupyter notebook。

我想运行这样的东西:

#####

singularity exec --bind /path/outside/image/:/path/inside/image/ jupyter.sif jupyter notebook --notebook-dir=/path/to/dir --no-browser --ip=127.0.0.1
Run Code Online (Sandbox Code Playgroud)

#####

本质上,只需启动一个普通的 jupyter 笔记本,它将使用 python 版本和安装在奇异图像中的包。理想情况下,笔记本将读取和写入图像外的文件(因此我指定了绑定路径)。

但是,当我运行上述命令时,出现以下错误:

#####

回溯(最近一次调用):文件“/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py”,第 528 行,在 get value = obj._trait_values[self.name] KeyError: '运行时目录'

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次调用最后一次):

文件“/opt/conda/bin/jupyter-notebook”,第 11 行,在 sys.exit(main()) 中

文件“/opt/conda/lib/python3.7/site-packages/jupyter_core/application.py”,第266行,在launch_instance return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)

文件“/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py”,第657行,在launch_instance app.initialize(argv)

文件“”,第 2 行,在初始化中

文件“/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py”,第87行,catch_config_error返回方法(app,*args,**kwargs)

初始化 self.init_configurables() 中的文件“/opt/conda/lib/python3.7/site-packages/notebook/notebookapp.py”,第 1626 行

文件“/opt/conda/lib/python3.7/site-packages/notebook/notebookapp.py”,第 1319 行,在 init_configurables connection_dir=self.runtime_dir 中,

文件“/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py”,第556行,在get return self.get(obj, cls)

文件“/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py”,第535行,在get value = self._validate(obj, dynamic_default())

文件“/opt/conda/lib/python3.7/site-packages/jupyter_core/application.py”,第 99 行,在 _runtime_dir_default ensure_dir_exists(rd, mode=0o700) …

python jupyter jupyter-notebook singularity-container

5
推荐指数
1
解决办法
1757
查看次数

如何在 Singularity 配方中激活 Anaconda 环境

我正在尝试创建一个奇点图像和配方,它将创建一个 anaconda 环境,然后激活所述环境,以便我可以在该环境中构建项目的 python 轮,以便在奇点构建完成后它 100% 安装并正常运行。

Bootstrap: docker
From: nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04

%environment

  # use bash as default shell
  SHELL=/bin/bash

  # add CUDA paths
  CPATH="/usr/local/cuda/include:$CPATH"
  PATH="/usr/local/cuda/bin:$PATH"
  LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
  CUDA_HOME="/usr/local/cuda"

  # add Anaconda path
  PATH="/usr/local/anaconda3/bin:$PATH"

  export PATH LD_LIBRARY_PATH CPATH CUDA_HOME
  export MKL_NUM_THREADS=1
  export OPENBLAS_NUM_THREADS=1

%setup
  # runs on host
  # the path to the image is $SINGULARITY_ROOTFS

%post
  # post-setup script

  # load environment variables
  . /environment

  # use bash as default shell
  echo "\n #Using bash as default shell \n" >> /environment …
Run Code Online (Sandbox Code Playgroud)

python anaconda singularity-container

5
推荐指数
1
解决办法
2095
查看次数

R 绘制带有矩形而不是文本的图

我在建设有一个管道snakemake,并使用condasingularity环境以确保可重复性。我遇到了一个错误,我的绘图上的文本被矩形替换 在此处输入图片说明

在 Linux 和 Mac 系统上试验管道并禁用奇异容器后,问题似乎源于缺少字体库,因为当我仅在 Mac 上仅使用conda( --use-conda)运行管道时,文本绘制正常。

奇点容器是从这个使用 Debian GNU/Linux 的miniconda docker镜像构建的。我设法创建了一个最小的示例管道,其中没有绘制文本。

# Snakefile
singularity: "docker://continuumio/miniconda3"

rule all:
    input:
        "mtcars-plot.png"

rule plot_mtcars:
    output:
        "mtcars-plot.png"
    conda:
        "minimal.yaml"
    script:
        "mtcars-test.R"
Run Code Online (Sandbox Code Playgroud)
# mtcars-test.R
library(ggplot2)
png("mtcars-plot.png")
ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot()
dev.off()
Run Code Online (Sandbox Code Playgroud)
# minimal.yaml
channels:
    - bioconda
    - conda-forge
    - defaults
dependencies:
    - r-base =3.6
    - r-ggplot2
Run Code Online (Sandbox Code Playgroud)

要绘制断开的图,请运行管道

snakemake --use-conda --use-singularity
Run Code Online (Sandbox Code Playgroud)

在 Debian GNU/Linux 上使用 R 正确绘制文本时,我可能缺少哪些软件包/库?

linux pipeline r snakemake singularity-container

5
推荐指数
1
解决办法
132
查看次数

使用 Visual Studio Code 远程启动 Singularity 容器

我知道您可以在 VSCode 中远程启动 docker 容器。是否可以对奇点容器做同样的事情?

remote-access visual-studio visual-studio-code singularity-container

5
推荐指数
1
解决办法
4099
查看次数

从 Singularity 容器访问主机 Python 虚拟环境

我有一个 Singularity 容器,其中安装了许多工具以及 Python 和 Jupyter。但我想在使用 Singularity 中的其他工具时访问我为 python 创建的外部虚拟环境。原因是我正在尝试不同的 python 包,如果没有“sudo”权限,这些包无法安装到 Singularity 容器中。由于 sudo 权限,我无法在主机上安装其他工具。

我能够激活虚拟环境,但无法使用它:当我运行 pip 命令或 Jupyter lab 时出现此错误。

bash: /home/username/virtual-env/bin/pip: /home/username/virtual-env/bin/python: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我想从从 Singularity 容器运行的虚拟环境运行 Jupyter 实验室。

virtualenv jupyter singularity-container

5
推荐指数
1
解决办法
627
查看次数

将奇点主目录更改为容器内的文件夹

背景

我有一个从 docker 镜像创建的奇点容器。docker 映像包含应位于用户主目录中的文件(例如,在 中$HOME/.files)。因为我不知道用户名是什么,所以我将文件放入/opt容器中,并希望将用户的 home 设置为/opt.

我希望能够以/opt主目录运行容器,或者能够以某种方式运行容器,以便主目录包含容器中已存在的文件

我尝试过的:

  • 使用--home标志:这会将主机上的文件夹映射为主目录,而不是容器中的文件夹。
  • 尝试$HOME使用以下命令覆盖环境变量--env HOME=/opt:我收到错误Overriding HOME environment variable with SINGULARITYENV_HOME is not permitted

其他问题

这个问题是相关的,但有兴趣将容器的主文件夹映射到主机上的文件夹

singularity-container

5
推荐指数
1
解决办法
1103
查看次数

在单一容器中将conda环境容器化

我遇到过许多实例,将conda环境容器化以实现长期可重复性确实很有帮助。由于我通常在高性能计算系统中运行,出于安​​全原因,它们必须是奇异容器。如何才能做到这一点?

hpc conda singularity-container

4
推荐指数
2
解决办法
1117
查看次数

如何更改奇点容器中的默认提示

我正在创建一个 Singularity 图像,并且想要一个自定义的 bash 提示符,就像我可以通过PS1在我的~/.bash_profile.

但是,不幸的是,Singularity 做了一些事情来强制执行自己的提示,如下所示:Singularity>。这不是一个很有帮助的提示。

我尝试在定义文件中设置 PS1,如下例所示:

# File prompt-test1.def
Bootstrap: shub
From: alpine:latest
%environment
export PS1="[my-container]\w\$ "
Run Code Online (Sandbox Code Playgroud)

我构建并运行了该图像,但无济于事:

sudo singularity build prompt-test.sif prompt-test.def
singularity shell prompt-test.sif
# shows Singularity>
Run Code Online (Sandbox Code Playgroud)

使用envshell 中的命令,我注意到已PROMPT_COMMAND设置:

echo $PROMPT_COMMAND
# PS1="Singularity> "; unset PROMPT_COMMAND
Run Code Online (Sandbox Code Playgroud)

...所以我试图改变这一点:

# File prompt-test2.def
Bootstrap: shub
From: alpine:latest
%environment
export PROMPT_COMMAND='PS1="[my-container]\w\$ "; unset PROMPT_COMMAND'
Run Code Online (Sandbox Code Playgroud)

...但提示保持不变!但现在,PROMPT_COMMAND容器内部看起来像

echo $PROMPT_COMMAND
# PS1="[my-container]\w\$ "; unset PROMPT_COMMAND; PROMPT_COMMAND="${PROMPT_COMMAND%%; PROMPT_COMMAND=*}";PS1="Singularity> "
Run Code Online (Sandbox Code Playgroud)

编辑以替换为更好的信息/.singularity.d/env …

shell command-prompt singularity-container

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