繁体   English   中英

Docker-组成Nginx多个容器烧瓶问题

[英]Docker-compose Nginx multiple containers flask issue

我有一个带有Docker-compose的Nginx反向代理设置的Flask应用程序。 我可以在一个容器中完成所有工作而没有问题,但我需要在同一台机器上启动暂存和生产服务器,所以我尝试将我的设置迁移到具有单独nginx-proxy容器的多个容器。 反向代理设置似乎没问题,但是当我使用代理访问应用程序时,Flask对请求有一些问题。 我在下面详细介绍了docker-compose文件和服务器输出。

NGINX-PROXY docker-compose.yml

version: "3.5"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - proxy

networks:
  proxy:

Flask docker-compose.yml

version: '3.5'

services:
  # other services defined, not relevant for the issue

  data-api:
    environment:
      FLASK_ENV: development
      VIRTUAL_HOST: app.local
    build: ./dataAPI
    expose: 
      - 5000
    ports:
      - 5000:5000
    volumes:
     - ./dataAPI:/dataAPI
    networks:
      - nginx_proxy

networks:
  nginx_proxy:
    external: true

我在app.local /etc/hosts添加了一行。 我首先启动了nginx然后应用程序。 如果我尝试直接使用0.0.0.0:5000/staging/data访问它,请求服务没有问题,但如果我尝试使用app.local/staging/data代理,Flask应用程序会抛出404:

烧瓶日志

data-api_1  | 172.20.0.1 - - [30/May/2019 14:13:29] "GET /staging/data/ HTTP/1.1" 200 -
data-api_1  | 172.20.0.2 - - [30/May/2019 14:13:31] "GET /staging/data/ HTTP/1.1" 404 -

看起来好像你把容器放在同一个网络上。 当烧瓶容器使用名为nginx_proxy的网络时, nginx_proxy使用名为proxy的网络。

顺便说一句,docker-compose对于编写需要多个容器的应用程序很有用。 如果将两个服务放在同一个docker-compose文件中,则可以更轻松地使用此设置,而不是为每个容器使用单独的docker-compose文件。 然后,您甚至不需要设置单独的网络,因为compose会为服务创建默认网络。

另请注意,由于您使用的是nginx反向代理,因此您可能不希望将烧瓶端口映射到主机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM