Docker-compose / Nginx / Gunicorn-Nginx无法正常工作

时间:2019-07-18 15:31:07

标签: python docker nginx flask gunicorn

我对Docker来说还很陌生,我正在尝试将Flask-App容器化。应用程序+ gunicorn的容器工作正常,我可以访问该网站。但是,当我使用docker-compose包含Nginx容器时,我无法再连接到该站点了。

我的文件:

Dockerfile(Flask):

db.countries.aggregate({$unwind:'$data.country.neighbor.name'})

Dockerfile(Nginx)

FROM python:3.7-stretch
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["gunicorn", "-b", "127.0.0.1:8080", "app:app"]

nginx.conf

FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/

还有docker-compose.yml

server {
    listen  8080;
    server_name localhost;

    location / {
        proxy_pass http://127.0.0.1:8080/;
    }

    location /static {
        alias /var/www-data;
    }
}

当我使用docker-compose up --build运行容器时,一切似乎都工作正常:

version: "3.7"

services:

  flask:
    build: ./flask
    container_name: flask_cookbook
    restart: always
    environment:
      - APP_NAME=Cookbook
    expose:
      - 8080

  nginx:
    build: ./nginx
    container_name: nginx_cookbook
    restart: always
    ports:
      - "80:8080"

但是当我转到127.0.0.1:8080时,没有任何连接。

我真的找不到错误,我可能在某个地方犯了错误...


其他信息: 我在Windows 10上

我的目录如下

Starting nginx_cookbook ... done
Starting flask_cookbook ... done
Attaching to nginx_cookbook, flask_cookbook
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Starting gunicorn 19.9.0
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Listening at: http://127.0.0.1:8080 (1)
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Using worker: sync
flask_cookbook | [2019-07-18 15:19:37 +0000] [8] [INFO] Booting worker with pid: 8

1 个答案:

答案 0 :(得分:0)

感谢@ShawnC。 ,我解决了问题。引用他:

  

您有一些问题。 A)您是代理,将nginx传递到与nginx侦听相同端口的本地主机,所以这是行不通的。您需要向烧瓶容器发出请求。

因此我将nginx.conf文件中的侦听端口更改为80(从8080),并将docker-compose.yml的nginx部分中的端口更改为80:80(从80:8080)

  

B)从您的机器向127.0.0.1:8080发出请求,因为没有Docker容器正在侦听,因此无法正常工作。您的配置说nginx应该使用端口80,它将映射到容器中的8080。所以您应该只向127.0.0.1:80

发出请求

因此,我将nginx.conf中的代理密码更改为flask_cookbook:8080。因此,容器名称以及flask_app的公开端口。这样,nginx容器可以向烧瓶容器发出请求。

我还必须将flask-Dockerfile中的gunicorn绑定更改为0.0.0.0:8080,因此我可以使用Localhost / 127.0.0.1连接到nginx容器。

现在它可以工作了,我可以在localhost:80上连接到我的网站。