Docker - Nginx не включает пользовательскую настройку - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь развернуть приложение Flask, используя uWSGI и Nginx в качестве обратного прокси.

Они подключены через сокет 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 - это пользовательское изображение Iсоздано (очевидно), что 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 использует для связи с uWSGI через сокет Unix.

И 6666 на 80, который является сервером по умолчанию для Nginx (тот, который загружаетстраница приветствия Nginx).

Почему я упоминаю об этом?Потому что получается, что когда я перехожу к:

http://localhost:7777/

Это говорит о том, что страница не может быть достигнута.

НО когда я перехожу к:

http://localhost:6666/

Он прекрасно отображает страницу приветствия Nginx.

И так же, какЗаметьте, я знаю, что я мог бы использовать Docker Compose и разделить приложение Flask на свой собственный контейнер, а Nginx - на другой контейнер.

Я делаю это так же, как самостоятельную практику.

1 Ответ

0 голосов
/ 24 ноября 2018

В demoapp.ini у вас есть

socket = demoapp.sock

, который не совпадает с путем в конфигурации nginx.Я всегда использую полный путь в своих проектах, и я помещаю .sock файлы в /tmp/

. Вы также делаете то, чего я раньше не видел, так что, если исправить это не поможетработать, попробуйте изменить

[uwsgi]
module = app:create_app()

на

[uwsgi]
module = app:app

и добавить

app = create_app()

в конец app.py.

...