linux - 将 Docker 转换为 Singularity 时遇到问题:Singularity 中的“功能未实现”,但在 Docker 中工作正常
问题描述
我有一个运行良好的 Ubuntu docker 容器。我有一个自定义二进制文件,可以按预期执行和返回。由于安全原因,我不能使用 docker 进行自动化测试。我创建了一个 docker 存档,然后从这个 docker 存档中加载了一个奇异容器。我需要运行的二进制文件失败并出现以下错误:
MyBinary::BinaryNameSpace::BinaryFunction[FATAL]: boost::filesystem::status: 函数未实现:“/var/tmp/username”
当我运行 $ldd <binary_path> 时,我看到一个 boost 文件系统二进制文件已链接。我不确定为什么二进制文件无法找到状态函数......
到目前为止,我已经使用了一个名为ermine的工具将动态链接的二进制文件转换为静态二进制文件
我仍然遇到同样的错误,我觉得这很奇怪。
非常感谢任何有关下一步查看方向的建议。谢谢你。
解决方案
罪魁祸首是过时的 Linux 内核。容器仍然使用主机的内核。
在 Docker 上,我使用的是 Kernel 5.4.x,而运行奇异容器的计算机运行的是 3.10.x
二进制文件中有 3.10.x 不支持的指令
除了在具有较新内核的另一台计算机上运行自动化测试外,目前没有任何修复方法。
推荐阅读
- symfony - Symfony Sonata 管理面板按出现次数排序(doctrin query builder)
- flutter - 带有 statefull 小部件的 Flutter listview builder 不会使用父小部件中的设置状态进行更新
- python - Dash 应用程序在选项卡之间切换时防止自动刷新
- c - 如何用C设计一个简单的登录系统?
- javascript - 如何使用 Vuetify 在图标和文本字段之间创建空间
- java - 如何将以下 java 查询放入 switch case?
- typescript - 如何使 tslint 接受以“_”开头的变量名
- swift - Swift didSet for var 使用 @Binding 在子级中更改
- c++ - 未找到 SDL_Mixer dll
- angular - Elasticsearch 部分搜索词 | 角