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

检查后这个问题我通过添加这两个标志,在 Debian 上正确安装了 ModSecurity lib,并使其全局可用./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 失败并显示与问题相同的错误消息。

相关内容