Docker-Nginx未启用自定义配置

时间:2018-11-23 22:19:41

标签: docker nginx flask uwsgi

我正在尝试使用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

这是我的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通信的那个。

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

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

  

http://localhost:7777/

它说无法访问该页面。

,当我导航至:

  

http://localhost:6666/

它使Nginx欢迎页面完美显示。

还有一点,我知道我可以使用Docker Compose并将Flask应用程序分离到其自己的容器中,并将Nginx分离到另一个容器中。

我正按照自己的做法这样做。

1 个答案:

答案 0 :(得分:1)

demoapp.ini中,您拥有

socket = demoapp.sock

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

您还在做我以前从未见过的事情,因此,如果无法解决上述问题,请尝试更改

[uwsgi]
module = app:create_app()

[uwsgi]
module = app:app

并添加

app = create_app()

app.py的底部。