【问题标题】:Docker-compose Nginx multiple containers flask issueDocker-compose Nginx 多容器烧瓶问题
【发布时间】:2019-05-30 14:28:20
【问题描述】:

我有一个 Flask 应用程序,它使用 docker-compose 设置了 Nginx 反向代理。我可以毫无问题地让所有东西在单个容器中工作,但我需要在同一台机器上启动登台和生产服务器,所以我试图将我的设置迁移到具有单独 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 -

【问题讨论】:

    标签: python docker nginx flask docker-compose


    【解决方案1】:

    您似乎没有将容器放在同一个网络上。 nginx_proxy 使用名为 proxy 的网络,而烧瓶容器使用名为 nginx_proxy 的网络。

    顺便说一下,docker-compose 对于编写需要多个容器的应用程序很有用。与其为每个容器使用单独的 docker-compose 文件,不如将这两个服务放在同一个 docker-compose 文件中,这种设置可能会更容易。然后,您甚至不需要设置单独的网络,因为 compose 会为服务创建默认网络。

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

    【讨论】:

    • 感谢您的建议。 proxy 网络是在 nginx 目录中定义的,因此它被称为 nginx_proxy。它们确实在同一个网络中,否则请求将不会转发到烧瓶应用程序(请参阅烧瓶日志)。但由于某种原因,当请求被代理时,flask 应用程序会返回 404。我想在同一台机器上运行与开发/生产完全相同的服务,从我在其他帖子中发现的内容来看,这应该是这样做的方法。
    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    相关资源
    最近更新 更多