问题描述
我有两个容器:
- "build",它编译/构建我的 cgi 应用程序,以及一个链接库(版本 1.8),来自 ubuntu:bionic-20201119
- "exec",确实运行它(并且也包含上述库),仍然来自 ubuntu:bionic-20201119
在我启动“exec”容器后,我注意到我的 cgi 失败了,因为它确实缺少上述库,但是来自以前的版本:
error while loading shared libraries: libzoo_service.so.1.6: cannot open shared object file: No such file or directory
虽然它应该是“libzoo_service.so.1.8”:实际提供的那个,它是与 cgi 应用程序一起构建的。
我很不解,于是试着去理解。
当我“ldd”来自“build”容器的cgi文件时,它说:
root@build:/# ldd /usr/lib/cgi-bin/zoo_loader.cgi
linux-vdso.so.1 (0x00007ffe3d56a000)
libzoo_service.so.1.8 => /usr/lib/libzoo_service.so.1.8 (0x00007f2f18186000)
...
当我从“exec”容器做同样的事情时,我看到的是:
root@exec:/# ldd /usr/lib/cgi-bin/zoo_loader.cgi
linux-vdso.so.1 (0x00007fffdf1af000)
libzoo_service.so.1.6 => not found
...
越来越好:从同一个“exec”容器中,当我将完全相同的 cgi 文件复制到 2 个不同的路径时,我得到了不同的结果:
root@exec:/# ldd /usr/lib/cgi-bin/zoo_loader.cgi root@10907ce22d0b:/# ldd /usr/lib/cgi-bin/zoo_loader.cgi
linux-vdso.so.1 (0x00007fffdf1af000)
libzoo_service.so.1.6 => not found
...
root@exec:/# ldd /tmp/cgi-bin/zoo_loader.cgi
linux-vdso.so.1 (0x00007ffe3d56a000)
libzoo_service.so.1.8 => /usr/lib/libzoo_service.so.1.8 (0x00007f2f18186000)
....
最好的是 /usr/lib/cgi-bin 下的 cgi 文件大小是 /tmp/cgi- 文件的一半- bin,虽然它们是从同一个文件中复制的:
FROM ubuntu:bionic-20201119
copY dist/libzoo_service.so.1.8 /usr/lib/
copY dist/zoo_loader.cgi /usr/lib/cgi-bin/
copY dist/zoo_loader.cgi /tmp/cgi-bin/
所以....我很确定这绝对是合法的...而且它是关于 Ubuntu/Linux 如何构建共享库树的:事实上,只有 cgi 文件位于 /usr/lib/ 受到影响听起来是一个很好的提示。
但我对 cgi 或 Linux 都不熟悉,或者不足以理解这里发生了什么......以及我如何修复它以便我的 cgi 应用实际上与其匹配的 libzoo_service.so.1.8 相关联
提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)