如何解决无法将 Docker 转换为 Singularity:Singularity 中的“功能未实现”,但在 Docker 中运行良好
我有一个 Ubuntu docker 容器,它可以正常工作。我有一个自定义的二进制文件,它按预期执行和返回。由于安全原因,我不能使用 docker 进行自动化测试。我创建了一个 docker 档案,然后我从这个 docker 档案中加载了一个奇点容器。我需要运行的二进制文件失败并出现以下错误:
MyBinary::BinaryNameSpace::BinaryFunction[FATAL]: boost::filesystem::status: 函数未实现:"/var/tmp/username"
当我运行 $ldd
到目前为止,我已经使用了一个名为 ermine 的工具将动态链接的二进制文件转换为静态二进制文件
我仍然遇到同样的错误,我觉得很奇怪。
非常感谢您对下一步方向的任何建议。谢谢。
解决方法
/var/tmp
和 /tmp
都是 silently automounted by default。如果在奇点构建期间或源 docker 映像中向 /var/tmp
添加了任何内容,则当主机的 /var/tmp
挂载在其上时,它将被隐藏。
您可以在运行奇异性命令时单独disable the automounts,这可能是您首先要检查它是否是问题的根源(例如 {{1 }})。我还建议使用 singularity run --no-mount tmp ...
或手动挂载 --writable-tmpfs
以确保任何临时文件都有可写的地方。否则,您可能会收到有关只读文件系统的错误。
host OS environment 还可能以难以调试的意外方式导致问题。我建议使用 -B /tmp
作为一般做法,以尽量减少这种情况。
罪魁祸首是过时的 Linux 内核。容器仍然使用主机的内核。
在 Docker 上,我使用的是内核 5.4.x,而运行奇异容器的计算机运行的是 3.10.x
3.10.x 不支持二进制文件中的指令
除了在具有较新内核的另一台计算机上运行自动化测试之外,目前没有修复方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。