Я создал многоэтапную сборку Docker, чтобы в итоге получить небольшой, компактный контейнер с последней версией nginx и некоторыми модулями, скомпилированными из исходного кода.
В конце я копирую двоичный файл и несколько других файлов в конечный контейнер — это работает отлично.
Кроме того, я пытаюсь настроить modsecurity, как описано здесь: https://www.nginx.com/blog/compiling-and-installing-modsecurity-for-open-source-nginx/
Это также отлично работает в исходном контейнере сборки. Но когда я копирую ngx_http_modsecurity_module.so в конечный целевой контейнер и запускаю nginx, он вылетает с ошибкой:
[emerg] 1#1: dlopen() "/usr/local/nginx/modules/ngx_http_modsecurity_module.so" failed (libmodsecurity.so.3: cannot open shared object file: No such file or directory) in /etc/nginx/nginx.conf:10
Файл определенно существует, поэтому сообщение об ошибке не является ни точным, ни полезным.
Так как это работает в контейнере сборки, я подозреваю, что чего-то еще не хватает, но сообщение об ошибке не дает никаких полезных подсказок? Что может отсутствовать? Где я могу поискать дополнительные подсказки? Спасибо.
PS: Я начинаю с образа debian:stretch-slim
решение1
По совпадению я узнал это сейчас. Мне пришлось:
Также скопируйте:
/usr/local/modsecurity
и установить:
libgeoip1 libxml2 liblmdb0 libyajl2
Вероятно, потому что это динамический модуль.
решение2
Пытатьсяhttps://hub.docker.com/r/krish512/modsecurity/, он уже построен с использованием последних правил ModSecurity CRS
решение3
После проверкиЭта проблемаЯ добился правильной установки библиотеки ModSecurity в Debian и ее глобальной доступности, добавив эти два флага в./configure
--prefix=/usr --with-ld-opt=/usr/lib
До этого, во время проверки ldd ngx_http_modsecurity_module.so
я получал
libmodsecurity.so.3 => /opt/ModSecurity/src/.libs/libmodsecurity.so.3
который работал нормально, пока я не очистил файлы сборки. После удаления /opt/ModSecurity
dir ldd
возвращался
libmodsecurity.so.3 => не найдено
и openresty/nginx завершился с ошибкой, аналогичной той, что была в вопросе.