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

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

Я создал многоэтапную сборку 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/ModSecuritydir lddвозвращался

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

и openresty/nginx завершился с ошибкой, аналогичной той, что была в вопросе.

Связанный контент