尝试使用Nginx和Docker在Flask Gunicorn应用程序上进行反向代理的问题

时间:2018-10-22 13:50:43

标签: docker nginx flask docker-compose gunicorn

我正在尝试制作一个反向代理,并使用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

我的dockerfile是

    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码头工人文件是

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可用站点和启用站点中的我的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

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

如果您有任何想法,将不胜感激。

对不起,英语不是我的母语。

2 个答案:

答案 0 :(得分:1)

正如Maxm的回答中所提到的,flask首先要依赖nginx来启动。解决它的一种方法是颠倒依赖顺序,但是我认为有一种更聪明的解决方案不需要依赖。

Nginx尝试通过缓存proxy_pass的dns结果进行一些优化,但是您可以通过将其设置为变量来使其更加灵活。这样一来,您就可以自由地重新启动烧瓶,而不必也重新启动nginx。

这是一个例子:

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

答案 1 :(得分:0)

server_name应该只是主机。尝试localhost或仅_

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

depends_on应该在nginx上而不是flask_min上。从烧瓶中取出并添加:

depends_on:
  - flask_min

致nginx。

看看是否可行,如果您遇到其他障碍,请告诉我。