Py学习  »  docker

尝试使用nginx和docker在flask gunicorn应用程序上生成反向代理时出现问题

aurelbzh • 4 年前 • 478 次点击  

我正在尝试制作一个反向代理,并将其与nginx、gunicorn、docker和docker compose一起用于我的flask应用程序。在此之前,nginx部分与web应用在同一个容器中,我试图将其分离。 我的docker_compose yaml文件是:

version: '3.6'

services:
  nginx:
    restart: always
    build: ./nginx/
    ports:
      - 8008:8008
    networks:  
      - web_net

  flask_min:
    build: .
    image: flask_min
    container_name: flask_min
    expose:
      - "8008"
    networks:  
      - web_net
    depends_on:
      - nginx

networks:
  web_net:
    driver: bridge

我的档案是:

    FROM python:3.6
    MAINTAINER aurelien beliard (email@domain.com)
    RUN apt update
    COPY . /usr/flask_min
    WORKDIR /usr/flask_min
    RUN useradd -r -u 20979 -ms /bin/bash aurelien.beliard
    RUN pip3 install -r requirements.txt
   CMD gunicorn -w 3 -b :8008 app:app

我的nginx docker文件是

FROM nginx
COPY ./flask_min /etc/nginx/sites-available/
RUN mkdir /etc/nginx/sites-enabled
RUN ln -s /etc/nginx/sites-available/flask_min /etc/nginx/sites-enabled/flask_min

我在/etc/nginx sites中的nginx配置文件可用,并且站点已启用,名为flask min:

server {
    listen 8008; 
    server_name http://192.168.16.241/ ;
    charset utf-8; 
    location / { 
        proxy_pass http://flask_min:8008;
         } }

requirements.txt文件是:

Flask==0.12.2
grequests==0.3.0
gunicorn==19.7.1
Jinja2==2.10

这两个容器创建良好,gunicorn启动良好,但我无法访问应用程序,nginx访问和错误日志中没有任何内容。

如果您有任何想法,将非常感谢。

抱歉,英语不是我的母语。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46886
 
478 次点击  
文章 [ 2 ]  |  最新文章 4 年前
maxm
Reply   •   1 楼
maxm    5 年前

server_name 应该只是主人。尝试 localhost 或者只是 _ 是的。

您还可以执行多个主机: server_name 192.168.16.241 localhost;

这个 depends_on 应该打开 nginx flask_min 是的。从烧瓶中取出并添加:

depends_on:
  - flask_min

给Nginx。

看看这样行不行,如果你再遇到麻烦就告诉我。

Michael Barany
Reply   •   2 楼
Michael Barany    5 年前

正如maxm的回答中提到的,flask依赖于nginx先启动。解决这个问题的一个方法是颠倒依赖顺序,但我认为有一个更聪明的解决方案不需要依赖关系。

NGIX尝试通过缓存Pro XYPASS的DNS结果来进行一些优化,但是通过将其设置为变量,可以使其更加灵活。这允许您自由重新启动烧瓶,而不必重新启动nginx。

下面是一个例子:

resolver 127.0.0.11 ipv6=off;
set $upstream http://flask_min:8008;
proxy_pass $upstream;