首页 > 解决方案 > Docker - Nginx 未启用自定义配置

问题描述

我正在尝试使用 uWSGI 和 Nginx 作为反向代理来部署 Flask 应用程序。

它们通过 unix 套接字连接(至少是这样的想法)。

所以,这是我的烧瓶应用程序:

应用程序.py:

from flask import Flask

def create_app():
    app = Flask(__name__)

    @app.route("/")
    def root():
        return "Hello, world!"

    return app

这是我的 Dockerfile:

FROM nginx-python

WORKDIR /app
COPY ./app .
RUN pip3 install -r requirements.txt

COPY ./demoapp.conf /etc/nginx/conf.d/demoapp.conf

EXPOSE 9090

CMD uwsgi --ini demoapp.ini

nginx-python 是我创建的自定义图像,它(显然)已经准备好使用 nginx 和 python。

这是我的 uWSGI 的 demoapp.ini:

[uwsgi]
module = app:create_app()

master = true
processes = 2

socket = demoapp.sock
chmod-socket = 666
vacuum = true

die-on-term = true

最后,这是我的 Nginx 配置:

server {
    listen 9090;
    server_name localhost;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/app/demoapp.sock
    }
}

这就是我运行图像的方式:

$ docker container run -it -p 7777:9090 -p 6666:80 demoapp

如您所见,我正在映射两个端口。 7777应该重定向到9090哪个是 Nginx 用来通过 unix 套接字与 uWSGI 通信的那个。

哪个是 Nginx666680默认服务器(加载 Nginx 欢迎页面的服务器)。

我为什么要提这个?因为事实证明,当我导航到:

http://localhost:7777/

它说无法访问该页面。

但是当我导航到:

http://localhost:6666/

它完美地呈现了 Nginx 欢迎页面。

顺便说一句,我知道我可以使用 Docker Compose 并将 Flask 应用程序分离到它自己的容器中,并将 Nginx 分离到另一个容器中。

我这样做只是作为一种自我分配的练习。

标签: dockernginxflaskuwsgi

解决方案


demoapp.ini你有

socket = demoapp.sock

与 nginx 配置中的路径不匹配。我总是在我的项目中使用完整的路径,并将.sock文件放入/tmp/

你也在做一些我以前没见过的事情,所以如果修复上述问题不起作用,请尝试更改

[uwsgi]
module = app:create_app()

[uwsgi]
module = app:app

并添加

app = create_app()

到底部app.py


推荐阅读