Docker-撰写Nginx多个容器烧瓶问题

时间:2019-05-30 14:28:21

标签: python docker nginx flask docker-compose

我有一个带有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:

烧瓶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

我在/etc/hosts中为app.local添加了一行。 我先启动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 -

1 个答案:

答案 0 :(得分:0)

您似乎没有将容器放在同一网络上。 nginx_proxy正在使用名为<Demo/>的网络,而烧瓶容器正在使用名为styles.root的网络。

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

另一个说明,由于您使用的是nginx反向代理,因此您可能不想将flask端口映射到主机。