奇点沙箱文件管理
Singularity sandbox file management
厌倦了与 lib install/dependencies 问题作斗争,我开始使用 Singularity。
虽然,我不确定我是否准确理解沙盒模式下文件管理(不是数据、程序)的工作原理。
例如,我设计了一个非常简单的定义文件,它只是一个“裸”Debian:
Bootstrap: library
From: debian
%post
apt-get update
我用它创建了一个沙箱来添加东西:
sudo singularity build --sandbox Test/ naked_Debian.def
然后我尝试安装一个程序。但我不明白的是我设法做到了,删除了沙箱目录,但我认为仍然有在沙箱生命周期中创建的文件(在 /dev、/运行、/root 等中)。 ).例如,我从 git 克隆的程序现在位于本地的 /root 中(独立于任何容器)。
据我了解,所有内容都在容器中,如果我删除沙箱目录,它们应该会消失。否则,我会在所有测试中留下很多乱七八糟的东西吗?然后我无法将容器从系统移植到另一个系统。
如果我创建任何新的沙箱目录,程序已经存在。
干杯,
马修
默认情况下,singularity 将 $HOME
挂载到容器并使用该路径作为 singularity shell / exec
的工作目录。由于您是 运行 带 sudo 的沙箱,因此 /root
正在安装,如果您没有 cd
到不同的目录,那么您克隆的任何存储库都会在那里结束。 /tmp
也会自动挂载,不过这不太可能导致问题,因为它只是临时文件。
您有几个选项可以避免文件在您意想不到的地方结束。
- 禁用 home 的自动挂载:
singularity shell --no-home ...
- 默认工作目录现在是
/
而不是 $HOME
并且文件是直接在沙箱中创建的(而不是挂载在目录中)
- 如果你想从沙盒中取出文件,你要么需要复制到容器内的
/tmp
,要么在主机OS上从/tmp
复制到所需位置
- 设置一个不同的位置作为家:
singularity shell --home $PWD ...
- 这将挂载并使用当前目录作为
$HOME
而不是主机 OS 上用户的 $HOME
- 在主机 OS 和容器之间移动文件更简单,但仍会在主机 OS
中创建文件
- 根本不要挂载系统目录:
singularity shell --contain --workdir /some/dir ...
/tmp
和 /var/tmp
的目录是在 /some/dir
中创建的,而不是在主机上使用 /tmp
和 /var/tmp
。 $HOME
与宿主机同路径,作为工作目录,但为空,与宿主机分开OS
- 与主机 OS 完全分离,同时仍允许容器与 OS
之间进行一些访问
有关这些选项的更多详细信息 can be found in the documentation。
厌倦了与 lib install/dependencies 问题作斗争,我开始使用 Singularity。 虽然,我不确定我是否准确理解沙盒模式下文件管理(不是数据、程序)的工作原理。 例如,我设计了一个非常简单的定义文件,它只是一个“裸”Debian:
Bootstrap: library
From: debian
%post
apt-get update
我用它创建了一个沙箱来添加东西:
sudo singularity build --sandbox Test/ naked_Debian.def
然后我尝试安装一个程序。但我不明白的是我设法做到了,删除了沙箱目录,但我认为仍然有在沙箱生命周期中创建的文件(在 /dev、/运行、/root 等中)。 ).例如,我从 git 克隆的程序现在位于本地的 /root 中(独立于任何容器)。 据我了解,所有内容都在容器中,如果我删除沙箱目录,它们应该会消失。否则,我会在所有测试中留下很多乱七八糟的东西吗?然后我无法将容器从系统移植到另一个系统。
如果我创建任何新的沙箱目录,程序已经存在。
干杯, 马修
默认情况下,singularity 将 $HOME
挂载到容器并使用该路径作为 singularity shell / exec
的工作目录。由于您是 运行 带 sudo 的沙箱,因此 /root
正在安装,如果您没有 cd
到不同的目录,那么您克隆的任何存储库都会在那里结束。 /tmp
也会自动挂载,不过这不太可能导致问题,因为它只是临时文件。
您有几个选项可以避免文件在您意想不到的地方结束。
- 禁用 home 的自动挂载:
singularity shell --no-home ...
- 默认工作目录现在是
/
而不是$HOME
并且文件是直接在沙箱中创建的(而不是挂载在目录中) - 如果你想从沙盒中取出文件,你要么需要复制到容器内的
/tmp
,要么在主机OS上从/tmp
复制到所需位置
- 默认工作目录现在是
- 设置一个不同的位置作为家:
singularity shell --home $PWD ...
- 这将挂载并使用当前目录作为
$HOME
而不是主机 OS 上用户的 - 在主机 OS 和容器之间移动文件更简单,但仍会在主机 OS 中创建文件
$HOME
- 这将挂载并使用当前目录作为
- 根本不要挂载系统目录:
singularity shell --contain --workdir /some/dir ...
/tmp
和/var/tmp
的目录是在/some/dir
中创建的,而不是在主机上使用/tmp
和/var/tmp
。$HOME
与宿主机同路径,作为工作目录,但为空,与宿主机分开OS- 与主机 OS 完全分离,同时仍允许容器与 OS 之间进行一些访问
有关这些选项的更多详细信息 can be found in the documentation。