Docker - Nginx 未启用自定义配置

Docker - Nginx not enabling custom configuration

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

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

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

app.py:

from flask import Flask

def create_app():
    app = Flask(__name__)

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

    return app

这是我的Docker文件:

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 准备就绪。

这是我的demoapp.ini uWSGI:

[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 通信的那个。

666680 这是 Nginx 的默认服务器(加载 Nginx 欢迎页面的服务器)。

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

http://localhost:7777/

说无法访问该页面

但是 当我导航到:

http://localhost:6666/

它完美呈现 Nginx 欢迎页面。

作为旁注,我知道我可以使用 Docker 将 Flask 应用程序组合并分离到它自己的容器中,将 Nginx 分离到另一个容器中。

我就是这样自习的。

demoapp.ini你有

socket = demoapp.sock

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

您还做了一些我以前从未见过的事情,所以如果修复上述问题不起作用,请尝试更改

[uwsgi]
module = app:create_app()

[uwsgi]
module = app:app

并添加

app = create_app()

app.py 的底部。