Отсутствует библиотека Qt с wkhtmltopdf в докере на Debian Buster
У меня есть докер-контейнер с запущенным Debian Buster, и я хочу запустить в нем wkhtmltopdf. У меня есть 2 хост-машины, одинаковые, и на одной и той же сборке контейнера с одним и тем же Dockerfile. Оба работают под управлением одной и той же версии докера. На одной машине 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 - я предполагаю, что он устанавливается как зависимость от wkhtmltopdf.
Вот версии всего, одинаковые на обеих машинах:
Внутри контейнера:
# 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 отличается? Почему он не находит его на неработающей машине.
Я попытался скопировать и связать libQt5Core.so.5.9 с рабочей машины на нерабочую, но это не помогло.
Это действительно раздражает меня.
0 ответов
Проблема заключается в совместимости между разделяемой библиотекой libQt5Core и работающим ядром. Система RHEL, где wkhtmltopdf не работает, использует версию ядра старше 3.17.
В контейнере Docker удалите .note.ABI-tag
ELF раздел из общей библиотеки, и wkhtmltopdf будет работать:
strip -R .note.ABI-tag /lib64/libQt5Core.so.5.11.3
strip
инструмент, вероятно, не входит в ваш контейнер Docker. Возможно, вам придется установить binutils
пакет.