【问题标题】:reload nginx container on content change在内容更改时重新加载 nginx 容器
【发布时间】:2019-09-02 15:57:37
【问题描述】:

我正在使用 Docker 设置 nginx 服务器。如果我向 all-html 添加一个新文件/目录,该内容是否需要动态加载到 nginx(无需重新加载 nginx)?

只有在再次重建图像时(没有缓存),我才能加载新内容。有什么方法可以设置 nginx 配置以动态加载内容而不重建 docker 映像?

Dockerfile

FROM ubuntu:latest

RUN apt-get update
RUN apt-get install -y nginx
RUN rm /etc/nginx/nginx.conf

ADD nginx.conf /etc/nginx/

ADD web /usr/share/nginx/html/
ADD web /var/www/html/

RUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 90

CMD service nginx start

nginx.conf

worker_processes 1;

events { worker_connections 1024; }

http {
    include    mime.types;
    sendfile on;
    server {
        root /usr/share/nginx/html/;
        index index.html;
        server_name localhost;
        listen 90;
        location /all-html {
               autoindex on;
        }
    }

}
ls  web/
all-html    icons       index.html  mime.types
ls  web/all-html/
1.html  ntf.zip 2.html

【问题讨论】:

    标签: docker nginx nginx-config


    【解决方案1】:

    使用VOLUME挂载web目录,使文件同步,Nginx动态加载内容,无需重建docker镜像。

    您可以在 Dockerfile 中挂载卷,甚至可以在启动容器时挂载,如下所示。

    -v web:/var/www/html/
    

    【讨论】:

      【解决方案2】:

      您可以将主机目录挂载为容器内的卷,在主机目录中进行更改(它们将在容器内传播)然后docker exec ... nginx -s reload OR kill -s HUP,是您提到的 bash sn-p 吗?或者您可以在容器内运行另一个进程,该进程将定期检查更改并重新加载 nginx 进程。

      【讨论】:

      • nginx 无需重新加载即可读取内容? (如果 reload 是唯一的解决方案,我们可以添加一个 cron 来查看内容变化)
      • 给定你的配置文件,如果你修改/usr/share/nginx/html/的内容,你不需要重新加载服务器(你可以根据需要添加/删除文件/目录)服务器会将其放入帐户,但您可能需要删除缓存以强制服务器加载新文件。但是如果你改变配置,我认为你需要重新加载服务器。
      猜你喜欢
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      相关资源
      最近更新 更多