我正在尝试制作一个反向代理,并使用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访问和错误日志中没有任何内容。
如果您有任何想法,将不胜感激。
对不起,英语不是我的母语。
答案 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。
看看是否可行,如果您遇到其他障碍,请告诉我。