Назад | Перейти на главную страницу

Многоступенчатая сборка Docker с nginx и modsecurity - невозможно открыть общий объект

Я создал многоступенчатую сборку докеров, чтобы получить в итоге небольшой компактный контейнер с самой последней версией 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 image

После проверки Эта проблема Я правильно установил ModSecurity lib в 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 реж ldd возвращался

libmodsecurity.so.3 => не найдено

и openresty / nginx не работал с тем же сообщением об ошибке из вопроса.

Пытаться https://hub.docker.com/r/krish512/modsecurity/, он уже построен с последними правилами ModSecurity CRS

По совпадению я узнал это сейчас. Мне пришлось:

Также скопируйте:

/usr/local/modsecurity

и установите:

libgeoip1 libxml2 liblmdb0 libyajl2

Наверное, потому что это динамический модуль.