如何在 docker 映像中啟用 nginx 模組

如何在 docker 映像中啟用 nginx 模組

我有一個 nginx 配置,其啟動如下

load_module modules/ndk_http_module.so;
load_module modules/ngx_http_set_misc_module.so;
load_module modules/ngx_http_headers_more_filter_module.so;
load_module modules/ngx_http_cache_purge_module.so;

當我使用以下 Dockerfile 時:

FROM nginx:mainline

ADD config/ /etc/nginx/
EXPOSE 80
EXPOSE 443

當我嘗試運行容器時出現以下錯誤:

2024/01/22 19:52:07 [emerg] 8#8: dlopen() "/etc/nginx/modules/ndk_http_module.so" failed (/etc/nginx/modules/ndk_http_module.so: cannot open shared object file: No such file or directory) in /etc/nginx/nginx.conf:1
webserver  | nginx: [emerg] dlopen() "/etc/nginx/modules/ndk_http_module.so" failed (/etc/nginx/modules/ndk_http_module.so: cannot open shared object file: No such file or directory) in /etc/nginx/nginx.conf:1

因此,這些模組不存在。我的問題是,如何啟用它們?我發現post,安裝模組如下

$> sudo apt install software-properties-common
$> nginx=stable 
$> sudo add-apt-repository ppa:nginx/$nginx
$> sudo apt update
$> sudo apt dist-upgrade

$> sudo apt install nginx-extras

但是,該命令sudo add-apt-repository ppa:nginx/$nginx會拋出錯誤

17.78 Setting up packagekit-tools (1.2.6-5) ...
17.79 Setting up software-properties-common (0.99.30-4) ...
17.90 Processing triggers for dbus (1.14.10-1~deb12u1) ...
18.15 Traceback (most recent call last):
18.15   File "/usr/bin/add-apt-repository", line 362, in <module>
18.15     sys.exit(0 if addaptrepo.main() else 1)
18.15                   ^^^^^^^^^^^^^^^^^
18.15   File "/usr/bin/add-apt-repository", line 345, in main
18.15     shortcut = handler(source, **shortcut_params)
18.15                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18.15   File "/usr/lib/python3/dist-packages/softwareproperties/shortcuts.py", line 40, in shortcut_handler
18.15     return handler(shortcut, **kwargs)
18.15            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
18.15   File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 86, in __init__
18.15     if self.lpppa.publish_debug_symbols:
18.15        ^^^^^^^^^^
18.15   File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 126, in lpppa
18.15     self._lpppa = self.lpteam.getPPAByName(name=self.ppaname)
18.15                   ^^^^^^^^^^^
18.15   File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 113, in lpteam
18.15     self._lpteam = self.lp.people(self.teamname)
18.15                    ^^^^^^^^^^^^^^
18.15 AttributeError: 'NoneType' object has no attribute 'people'

我現在有點不知道該如何安裝 nginx 模組?

答案1

如果我們搜尋該錯誤訊息 ( AttributeError: 'NoneType' object has no attribute 'people'),我們會找到第一個結果這個問題。得票最高的答案顯示解決方案是:

apt-get install python3-launchpadlib

事實上,這讓我們可以運行add-apt-repository

$ podman run -it --rm docker.io/nginx:mainline bash
root@744ec39923cd:/# apt update >& /dev/null
root@744ec39923cd:/# apt -y install software-properties-common >& /dev/null
root@744ec39923cd:/# add-apt-repository ppa:nginx/stable
Traceback (most recent call last):
  .
  .
  .
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 113, in lpteam
    self._lpteam = self.lp.people(self.teamname)
                   ^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'people'
root@744ec39923cd:/# apt -y install python3-launchpadlib >& /dev/null
root@744ec39923cd:/# add-apt-repository ppa:nginx/stable
Repository: 'deb https://ppa.launchpadcontent.net/nginx/stable/ubuntu/ bookworm main'
Description:
This PPA contains the latest Stable Release version of the nginx web server software.

**Only Non-End-of-Life Ubuntu Releases are supported in this PPA**

**Development releases of Ubuntu are not officially supported by this PPA, and uploads for those will not be available until actual final releases for those versions**
More info: https://launchpad.net/~nginx/+archive/ubuntu/stable
Adding repository.
Press [ENTER] to continue or Ctrl-c to cancel.
Adding deb entry to /etc/apt/sources.list.d/nginx-ubuntu-stable-bookworm.list
Adding disabled deb-src entry to /etc/apt/sources.list.d/nginx-ubuntu-stable-bookworm.list
Adding key to /etc/apt/trusted.gpg.d/nginx-ubuntu-stable.gpg with fingerprint 8B3981E7A6852F782CC4951600A6F0A3C300EE8C
Hit:1 http://deb.debian.org/debian bookworm InRelease
Hit:2 http://deb.debian.org/debian bookworm-updates InRelease
Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease
Get:4 http://deb.debian.org/debian bookworm/main amd64 DEP-11 Metadata [4492 kB]
Fetched 4492 kB in 1s (4458 kB/s)
Reading package lists... Done

但這最終失敗了,因為參考 ppa只有 Ubuntu 的軟體包;沒有適用於此nginx:stable映像所使用的基於 Debian Bookworm 的映像的軟體包。

此外,該 PPA 僅支援 2018 年發布的 Bionic (18.04) 及之前的 Ubuntu 版本。


這個答案有使用 nginx 動態模組擴充基礎鏡像的說明。

根據您的需求,從最近的基於 Ubuntu 的映像開始可能會更簡單。 Nginx 和大多數模組已經針對 Ubuntu 進行了打包,因此類似這樣的內容可以幫助您完成大部分工作:

FROM ubuntu:23.04

RUN apt update && apt -y install \
  nginx \
  libnginx-mod-http-ndk \
  libnginx-mod-http-headers-more-filter \
  libnginx-mod-http-cache-purge \
  && \
  apt clean all

這會讓你得到一切,除了ngx_http_set_misc_module.so

相關內容