Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Singularity container 奇点沙盒文件管理_Singularity Container - Fatal编程技术网

Singularity container 奇点沙盒文件管理

Singularity container 奇点沙盒文件管理,singularity-container,Singularity Container,受够了与lib安装/依赖问题的斗争,我开始使用Singularity。 尽管如此,我不确定自己是否确切地理解了它在沙箱模式下的文件管理(而不是数据、程序)是如何工作的。 例如,我设计了一个非常简单的定义文件,它只是一个“裸”Debian: 我创建了一个沙盒,其中包含以下内容: sudo singularity build --sandbox Test/ naked_Debian.def 我试着安装一个程序。但我不明白的是,我成功地做到了,删除了沙盒目录,但我认为仍然有在沙盒生命周期中创建的文件

受够了与lib安装/依赖问题的斗争,我开始使用Singularity。 尽管如此,我不确定自己是否确切地理解了它在沙箱模式下的文件管理(而不是数据、程序)是如何工作的。 例如,我设计了一个非常简单的定义文件,它只是一个“裸”Debian:

我创建了一个沙盒,其中包含以下内容:

sudo singularity build --sandbox Test/ naked_Debian.def
我试着安装一个程序。但我不明白的是,我成功地做到了,删除了沙盒目录,但我认为仍然有在沙盒生命周期中创建的文件(在/dev、/run、/root等中)。例如,我从git克隆的程序现在位于本地的/root中(独立于任何容器)。 据我所知,所有东西都在容器中,如果我删除沙盒目录,它们就会消失。否则,我会把所有的测试都搞得一团糟?然后我无法将容器从一个系统移植到另一个系统

如果我创建任何新的沙盒目录,程序已经存在

干杯,
Mathieu

默认情况下,singularity将
$HOME
装载到容器中,并将该路径用作
singularity shell/exec
的工作目录。由于您正在使用sudo运行沙箱,
/root
正在装载,如果您没有
cd
到其他目录,那么您克隆的任何repo都会在这里结束<代码>/tmp也会自动装入,但这不太可能导致问题,因为它只是临时文件

您有几个选项可以避免文件最终出现在您不希望出现的地方

  • 禁用主页自动装载:
    singularity shell--没有主页…
    • 默认的工作目录现在是
      /
      ,而不是
      $HOME
      ,文件直接在沙箱中创建(与装入目录相反)
    • 如果要从沙箱中取出文件,则需要将文件从容器中复制到
      /tmp
      ,并在主机操作系统上从
      /tmp
      复制到所需位置
  • 设置一个不同的位置用作主页:
    singularity shell--home$PWD…
    • 这将装入并使用当前目录作为主机操作系统上用户的
      $HOME
      ,而不是用户的
      $HOME
    • 在主机操作系统和容器之间移动文件更简单,但仍然在主机操作系统中创建文件
  • 根本不挂载系统目录:
    singularity shell--contain--workdir/some/dir…
    • /tmp
      /var/tmp
      的目录是在
      /some/dir
      中创建的,而不是在主机上使用
      /tmp
      /var/tmp
      $HOME
      与主机具有相同的路径,并用作工作目录,但它为空且与主机操作系统分离
    • 与主机操作系统完全分离,同时仍允许在容器和操作系统之间进行一些访问

  • 有关这些选项的其他详细信息。

    默认情况下,singularity将
    $HOME
    装载到容器中,并将该路径用作
    singularity shell/exec
    的工作目录。由于您正在使用sudo运行沙箱,
    /root
    正在装载,如果您没有
    cd
    到其他目录,那么您克隆的任何repo都会在这里结束<代码>/tmp也会自动装入,但这不太可能导致问题,因为它只是临时文件

    您有几个选项可以避免文件最终出现在您不希望出现的地方

  • 禁用主页自动装载:
    singularity shell--没有主页…
    • 默认的工作目录现在是
      /
      ,而不是
      $HOME
      ,文件直接在沙箱中创建(与装入目录相反)
    • 如果要从沙箱中取出文件,则需要将文件从容器中复制到
      /tmp
      ,并在主机操作系统上从
      /tmp
      复制到所需位置
  • 设置一个不同的位置用作主页:
    singularity shell--home$PWD…
    • 这将装入并使用当前目录作为主机操作系统上用户的
      $HOME
      ,而不是用户的
      $HOME
    • 在主机操作系统和容器之间移动文件更简单,但仍然在主机操作系统中创建文件
  • 根本不挂载系统目录:
    singularity shell--contain--workdir/some/dir…
    • /tmp
      /var/tmp
      的目录是在
      /some/dir
      中创建的,而不是在主机上使用
      /tmp
      /var/tmp
      $HOME
      与主机具有相同的路径,并用作工作目录,但它为空且与主机操作系统分离
    • 与主机操作系统完全分离,同时仍允许在容器和操作系统之间进行一些访问

  • 有关这些选项的更多详细信息。

    感谢tsnowlan提供的详细回答!因此,如果我理解正确,文件的管理方式独立于“build sandox”命令,但完全取决于如何使用“shell”来“进入”沙盒容器?感谢tsnowlan提供的详细答案!因此,如果我理解正确,文件的管理方式独立于“build sandox”命令,但完全取决于如何使用“shell”来“进入”沙盒容器?
    sudo singularity build --sandbox Test/ naked_Debian.def