Docker 为什么在/usr/lib/cgi-bi中生成映像时会更改我的cgi文件?

Docker 为什么在/usr/lib/cgi-bi中生成映像时会更改我的cgi文件?,docker,ubuntu,shared-libraries,cgi,ldd,Docker,Ubuntu,Shared Libraries,Cgi,Ldd,我有两个容器: “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

我有两个容器:

  • “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应用程序一起构建的

我很困惑,因此试图理解。
当我从“build”容器“ldd”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文件复制到两个不同的路径时,我得到了不同的结果:

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如何构建共享库树的:只有/usr/lib/下的cgi文件受到影响这一事实听起来是一个很好的提示

但我对cgi或Linux都不熟悉,或者不足以理解这里发生了什么。。。以及我如何修复它,使我的cgi应用程序实际上与其匹配的libzoo_服务相链接

提前谢谢