首页 > 解决方案 > 无法构建可写奇点容器

问题描述

我正在尝试使用该命令构建一个可写的奇点容器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

解决方案


--writable 是运行的选项。那是为了建设:

sudo singularity build lolcow.img shub://GodloveD/lolcow

对于运行:

singularity run --fakeroot --writable lolcow.img

您还需要 --fakeroot 写入根可访问的位置。

但是,它不是持久的。正如“将 SIF 文件转换为临时沙箱...”消息所提醒的那样。也就是说,您可以在会话期间编写,但完成后它就消失了:

$ singularity shell -f --writable lolcow.img

INFO:    Converting SIF file to temporary sandbox...
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
Singularity> echo test > /etc/banana
Singularity> cat /etc/banana
test
Singularity> exit
INFO:    Cleaning up image...

$ singularity shell -f --writable lolcow.img

INFO:    Converting SIF file to temporary sandbox...
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
Singularity> cat /etc/banana
cat: /etc/banana: No such file or directory
Singularity>

For persistent writes for testing/developing purpose you can use --sandbox option, though you'll need to run it as root too:

$ sudo singularity build --sandbox lolcow.img shub://GodloveD/lolcow

$ sudo singularity shell --writable lolcow.img

WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
Singularity> echo test > /etc/banana
Singularity> cat /etc/banana
test
Singularity> exit

$ sudo singularity shell --writable lolcow.img
WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
Singularity> cat /etc/banana
test
Singularity> exit

推荐阅读