我正在尝试制作一个包含Nginx稳定最新版本的dockerfile,并使用vts模块进行了编译.....有一个大问题,当我将其放入docker文件时,找不到一些汽车链接会下载并安装最新的稳定的nginx我只能指定1.14.2之类的版本吗?有没有办法我可以修改dockerfile使其始终下载最新版本,而不仅仅是一个版本?
这是我的dockerfile
FROM debian:stretch-slim
RUN apt-get update && \
apt-get install -y git wget libreadline-dev libncurses5-dev libpcre3- dev libssl-dev perl make build-essential zlib1g-dev && \
cd /tmp/ && \
wget http://nginx.org/download/nginx-1.14.2.tar.gz && \
git clone git://github.com/vozlt/nginx-module-vts.git && \
tar zxvf nginx-1.14.2.tar.gz && \
rm -f nginx-1.14.2.tar.gz && \
cd nginx-1.14.2 && \
./configure --prefix=/tmp/nginx-1.14.2 --sbin-path=/usr/sbin/nginx -- modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock --http-client-body-temp- path=/var/cache/nginx/client_temp --http-proxy-temp- path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi- temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp- path=/var/cache/nginx/scgi_temp \
--user=nginx --group=nginx --with-compat --with-file-aio --with- threads --with-http_addition_module --with-http_auth_request_module \
--with-http_dav_module --with-http_flv_module --with- http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module \
--with-http_random_index_module --with-http_realip_module --with- http_secure_link_module --with-http_slice_module --with-http_ssl_module \
--with-http_stub_status_module --with-http_sub_module --with- http_v2_module --with-mail --with-mail_ssl_module --with-stream \
--with-stream_realip_module --with-stream_ssl_module --with- stream_ssl_preread_module \
--with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx- 1.14.2/debian/debuild-base/nginx-1.14.2=. -specs=/usr/share/dpkg/no-pie- compile.specs -fstack-protector-strong -Wformat -Werror=format-security - Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
--with-ld-opt='-specs=/usr/share/dpkg/no-pie-link.specs -Wl,-z,relro - Wl,-z,now -Wl,--as-needed -pie' \
--add-module=/tmp/nginx-module-vts && \
make && make install && \
cp -f objs/nginx /usr/sbin/nginx && \
apt-get clean && rm -rf /var/lib/apt/lists/*
CMD ["nginx", "-g", "daemon off;"]
答案 0 :(得分:2)
如果您正在寻找一种简单的方法来从源代码编译nginx期间继续使用稳定版本,因为它没有一个直接的网址afaik,那么您可以像这样将build argument传递给Dockerfile:< / p>
...
ARG NGINX_STABLE_VERSION
RUN wget http://nginx.org/download/nginx-${NGINX_STABLE_VERSION}.tar.gz
...
并运行如下所示的build命令,以根据传递的参数继续下载nginx版本:
docker build --build-arg NGINX_STABLE_VERSION=1.14.2 .
但是,如果您正在寻找如何继续使用带有自定义模块的nginx官方docker镜像-假设您正在使用的所有自定义模块都支持vts模块之类的动态模块功能,那么您可以通过使用multi-stage builds并使用nginx dynamic modules 功能来实现。
根据nginx-module-vts changelog,支持将模块编译为动态模块,因此您可以进行多阶段构建,将nginx与所需的模块一起编译,然后将生成的文件复制到具有相同内容的nginx映像中。版本以使其正常工作。
Nginx稳定图像可以在标记有stable
字词的here中找到。
现在您要做的就是修改Dockerfile并使其使用动态模块的方式,然后添加另一个阶段以将稳定映像与从第一阶段生成的新模块一起使用,并且您可以在例如:
...
ARG NGINX_STABLE_VERSION
RUN wget http://nginx.org/download/nginx-${NGINX_STABLE_VERSION}.tar.gz
...
并像这样运行构建:
docker build --build-arg NGINX_STABLE_VERSION=1.14.2 .
Nginx并没有提供一个每次都可用来获取稳定版本的链接,因此您可能需要解析下载页面的html,如下所示,以保持获取稳定版本的最新下载链接:>
我们依赖HTML页面,从长远来看,它不是最可靠的解决方案。
echo "http://nginx.org$(curl -s http://nginx.org/en/download.html | grep -oP 'Stable version.*?\K(/download/.*?tar.gz)')"
输出:
http://nginx.org/download/nginx-1.14.2.tar.gz
在您的Dockerfile中,它可能是这样的:
确保已安装curl
RUN curl "http://nginx.org$(curl -s http://nginx.org/en/download.html | grep -oP 'Stable version.*?\K(/download/.*?tar.gz)')" --output nginx.tar.gz