同一个 apptainer 实例上有两个 shell?

问题描述 投票:0回答:1

我正在尝试学习在同一个容器上有两个具有相同覆盖层的外壳。一些谷歌搜索表明我想启动一个“实例”,然后将其插入两次。我已经用

--fakeroot
构建了我的图像和叠加层。我正在共享此服务器,因此我希望尽可能不打扰其他用户。

$ apptainer instance start --fakeroot --overlay my_overlay.img my_image.sif my_new_instance_name
INFO:    User not listed in /etc/subuid, trying root-mapped namespace
INFO:    Using fakeroot command combined with root-mapped namespace
INFO:    Terminating fuse-overlayfs after timeout
INFO:    Timeouts can be caused by a running background process
INFO:    Cleanup error: while stopping driver for /var/lib/apptainer/mnt/session/final: fuse-overlayfs exited: fuse: failed to unmount /var/lib/apptainer/mnt/session/final: Invalid argument
ERROR:   container cleanup failed: no instance found with name my_new_instance_name
FATAL:   container creation failed: while applying cgroups config: unable to start unit "apptainer-2317013.scope" (properties [{Name:Description Value:"libcontainer container 2317013"} {Name:Slice Value:"system.slice"} {Name:Delegate Value:true} {Name:PIDs Value:@au [2317013]} {Name:MemoryAccounting Value:true} {Name:CPUAccounting Value:true} {Name:IOAccounting Value:true} {Name:TasksAccounting Value:true} {Name:DefaultDependencies Value:false}]): Interactive authentication required.

FATAL:   while executing starter: failed to start instance: while running /usr/libexec/apptainer/bin/starter: exit status 255

不太确定如何处理此错误。

apptainer
1个回答
0
投票

您遇到的错误表明由于权限或资源限制,apptainer 实例启动过程出现问题,可能与 fakeroot、cgroups 或 fusion-overlayfs 超时有关。以下是解决这些问题的方法:

需要解决的要点: 用户未在 /etc/subuid 中列出:fakeroot 命令需要 subuid 映射才能正常运行。 fusion-overlayfs 超时:这可能是由于覆盖文件或后台运行的某些内容的问题引起的。 Cgroup 问题:该错误表明尝试应用 cgroup 设置时实例创建失败,并提到需要交互式身份验证。这可能是需要 root 或提升权限的权限问题。

解决步骤:

  1. 确保 subuid 和 subgid 映射设置正确 由于您使用的是 --fakeroot,Apptainer 需要通过 /etc/subuid 和 /etc/subgid 将您的用户 ID 映射到其他子用户 ID。如果这些设置不正确,您将面临权限错误。您可以请求管理员为您进行设置,或者如果您有访问权限,请为您的用户添加条目:

echo“您的用户名:100000:65536”| sudo tee -a /etc/subuid /etc/subgid

  1. 检查其他实例或进程是否正在使用您的覆盖层 有关 fusion-overlayfs 的错误可能意味着其他东西正在使用您的覆盖文件。尝试使用覆盖层停止任何现有实例并确保其已卸载:

apptainer 实例停止 my_new_instance_name umount /var/lib/apptainer/mnt/session/final

如果没有活动进程,请手动清理所有延迟文件。

  1. 确保您有足够的 cgroup 权限 Apptainer 可能需要管理 cgroup 的权限。如果您在共享环境中运行它,您可能缺乏执行此操作所需的权限。您可以尝试要求管理员将您的用户添加到适当的 cgroup 控制器,或者以更少的资源限制运行您的容器:

apptainer 实例启动 --no-cgroups --fakeroot --overlay my_overlay.img my_image.sif my_new_instance_name

  1. 延长保险丝覆盖超时 如果fuse-overlayfs超时仍然存在,请尝试增加超时值。将 --timeout 标志添加到 apptainer 实例启动命令中。例如:

apptainer 实例启动 --fakeroot --timeout 60 --overlay my_overlay.img my_image.sif my_new_instance_name

  1. 尝试不使用 fakeroot 或请求 sudo 访问权限 如果 fakeroot 导致问题,并且您有足够的权限,请尝试在没有 fakeroot 的情况下运行实例,或请求临时 sudo 访问权限以直接使用 root 权限运行 Apptainer。

  2. 仔细检查叠加图像 验证您的 my_overlay.img 是否是支持该图像的有效且格式良好的叠加层。您也可以尝试不使用覆盖层,看看问题是否在那里:

apptainer 实例启动 --fakeroot my_image.sif my_new_instance_name

调试 如果上述方法都没有帮助,启用调试日志可能会提供更多见解:

apptainer --debug 实例启动 --fakeroot --overlay my_overlay.img my_image.sif my_new_instance_name

尝试这些步骤

© www.soinside.com 2019 - 2024. All rights reserved.