首页 > 解决方案 > 将 Docker 转换为 Singularity 时遇到问题:Singularity 中的“功能未实现”,但在 Docker 中工作正常

问题描述

我有一个运行良好的 Ubuntu docker 容器。我有一个自定义二进制文件,可以按预期执行和返回。由于安全原因,我不能使用 docker 进行自动化测试。我创建了一个 docker 存档,然后从这个 docker 存档中加载了一个奇异容器。我需要运行的二进制文件失败并出现以下错误:

MyBinary::BinaryNameSpace::BinaryFunction[FATAL]: boost::filesystem::status: 函数未实现:“/var/tmp/username”

当我运行 $ldd <binary_path> 时,我看到一个 boost 文件系统二进制文件已链接。我不确定为什么二进制文件无法找到状态函数......

到目前为止,我已经使用了一个名为ermine的工具将动态链接的二进制文件转换为静态二进制文件

我仍然遇到同样的错误,我觉得这很奇怪。

非常感谢任何有关下一步查看方向的建议。谢谢你。

标签: linuxdockerboostdynamic-linkingsingularity-container

解决方案


罪魁祸首是过时的 Linux 内核。容器仍然使用主机的内核。

在 Docker 上,我使用的是 Kernel 5.4.x,而运行奇异容器的计算机运行的是 3.10.x

二进制文件中有 3.10.x 不支持的指令

除了在具有较新内核的另一台计算机上运行自动化测试外,目前没有任何修复方法。


推荐阅读