代码之家  ›  专栏  ›  技术社区  ›  Larry Martell

debian buster上docker中缺少wkhtmltopdf的Qt库

  •  0
  • Larry Martell  · 技术社区  · 6 年前

    我有一个运行DebianBuster的docker容器,我想在里面运行wkhtmltopdf。我有两台主机,都是相同的,都运行同一个容器构建相同的Dockerfile。两者都运行相同版本的docker。在一台机器上wkhtmltopdf运行良好,但在另一台机器上我得到:

    wkhtmltopdf: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
    

    在其工作的机器上:

    # ldd /usr/bin/wkhtmltopdf | grep libQt5Core
     libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f8da6f2f000)
    
    # ls -l /lib/x86_64-linux-gnu/libQt5Core.so.5*
    lrwxrwxrwx. 1 root root      19 Dec  4  2017 /lib/x86_64-linux-gnu/libQt5Core.so.5 -> libQt5Core.so.5.9.2
    lrwxrwxrwx. 1 root root      19 Dec  4  2017 /lib/x86_64-linux-gnu/libQt5Core.so.5.9 -> libQt5Core.so.5.9.2
    -rw-r--r--. 1 root root 5138560 Dec  4  2017 /lib/x86_64-linux-gnu/libQt5Core.so.5.9.2
    

    在不工作的机器上:

    # ldd /usr/bin/wkhtmltopdf | grep libQt5Core
     libQt5Core.so.5 => not found
    
    # ls -l /lib/x86_64-linux-gnu/libQt5Core.so.5*
    lrwxrwxrwx. 1 root root      20 Nov 18 16:36 /lib/x86_64-linux-gnu/libQt5Core.so.5 -> libQt5Core.so.5.11.2
    lrwxrwxrwx. 1 root root      20 Nov 18 16:36 /lib/x86_64-linux-gnu/libQt5Core.so.5.11 -> libQt5Core.so.5.11.2
    -rw-r--r--. 1 root root 5196040 Nov 18 16:36 /lib/x86_64-linux-gnu/libQt5Core.so.5.11.2
    

    现在我没有显式地安装Qt—我假设它是作为wkhtmltopf的依赖项安装的。

    容器内部:

    # cat /etc/debian_version 
    buster/sid
    # wkhtmltopdf -V          
    wkhtmltopdf 0.12.4
    

    外部容器:

    # cat /etc/redhat-release 
    Red Hat Enterprise Linux Server release 7.6 (Maipo)
    # docker -v
    Docker version 17.06.2-ee-18, build c78b5e1
    

    为什么libQt5Core的版本不同?为什么它在不工作的机器上找不到呢。

    这真让我烦恼。

    0 回复  |  直到 6 年前
        1
  •  2
  •   Patrick W. Barnes    6 年前

    问题是libQt5Core共享库和正在运行的内核之间的兼容性问题。wkhtmltopfd无法工作的RHEL系统运行的内核版本早于3.17。

    在Docker容器中,将 .note.ABI-tag

    strip -R .note.ABI-tag /lib64/libQt5Core.so.5.11.3
    

    这个 strip 工具可能未包含在Docker容器中。您可能需要安装 binutils