首页 > 解决方案 > 自定义 Nginx conf 未反映在 uwsgi-nginx docker 映像中

问题描述

我已经建立了一个dockerfile。我的自定义 nginx conf ( nginx.conf) 在根目录中

FROM tiangolo/uwsgi-nginx:python3.8-alpine

RUN apk add py3-setuptools
RUN apk add python3-dev

RUN apk add gcc
RUN apk add g++

RUN apk add --no-cache libressl-dev curl-dev musl-dev libffi-dev make

ARG env

WORKDIR /app

COPY ./pip_req.txt /app
RUN pip install -r /app/pip_req.txt

COPY ./ /app

ENV UWSGI_INI /app/deployment/$env/uwsgi.ini

RUN rm /etc/nginx/conf.d/default.conf


COPY deployment/$env/supervisor.conf /etc/supervisor.d/app.ini
COPY deployment/$env/nginx.conf /etc/nginx/conf.d/nginx.conf

在 docker 映像部署中,我在/etc/nginx/conf.d/nginx.conf

server {
    listen 80;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi.sock;
    }
}

如果我用另一个名称复制 nginx.conf,文件复制正确,但我不确定哪个 conf 正在使用,因为两个 conf 都使用相同的监听端口。

标签: dockernginxuwsgi

解决方案


您使用的图像一个自定义入口点脚本,它在启动时完全重写 Nginx 配置。有一些通过环境变量自定义它的最小能力,或者看起来如果您有一个/app/nginx.conf文件被复制到/etc/nginx/nginx.conf而其他文件未修改。如果您在 中确实有其他文件/etc/nginx/conf.d,则除了此默认生成的文档外,还会记录它们以供使用。

此映像设置为在单个容器中运行两个单独的进程通常不被认为是 Docker 最佳实践。您还可以考虑基于标准python镜像和单独的nginx代理容器运行自定义镜像,也许使用 Docker Compose 将它们一起启动。标准nginx镜像有一个固定的默认配置,可以更正常地覆盖(将COPY其放入派生镜像或绑定挂载);它唯一的特殊设置是能够替换环境变量。


推荐阅读