Docker-compose Nginx多个容器烧瓶问题



我有一个带有 Nginx 反向代理设置的 Flask 应用程序,其中包含 docker-compose。我可以毫无问题地让所有内容在单个容器中工作,但我需要在同一台计算机上启动暂存服务器和生产服务器,因此我正在尝试使用单独的 nginx-proxy 容器将我的设置迁移到多个容器。反向代理设置似乎还可以,但是当我使用代理访问应用程序时,Flask 的请求出现了一些问题。我在下面详细介绍了 docker 撰写文件和服务器输出。

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

我在/etc/hosts中添加了一行用于app.local.我首先启动nginx,然后启动应用程序。如果我尝试直接访问它0.0.0.0:5000/staging/data则请求可以毫无问题地提供服务,但是如果我尝试将代理与 Flask 应用程序app.local/staging/data一起使用,则会抛出 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使用名为 proxy 的网络,而烧瓶容器使用名为 nginx_proxy 的网络。

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

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

最新更新