nginx 如何在Docker中访问Flask API路由而不指定端口号?

lo8azlld  于 2023-08-03  发布在  Nginx
关注(0)|答案(1)|浏览(110)

我有一个Flask API,有两个路由,/callapi 1和/callapi 2,我正在使用Docker部署。为了扩展服务器并同时处理多个请求,我使用命令docker-compose up -d --build --scale app=2。Flask API服务器由Gunicorn提供服务。
当运行Docker示例时,服务器示例被分配了随机端口号,这使得在不知道特定端口的情况下很难访问API。
例如,目前,我可以像这样访问API:response = requests.post(“http://127.0.0.1:54471/callapi1“,json=img_data)response = requests.post(“http://127.0.0.1:54472/callapi1“,json=img_data)
我想配置Docker和Nginx,这样我就可以在不指定端口号的情况下访问API,如下所示:http://localhost/callapi1 http://localhost/callapi2
我的Docker Compose文件看起来像这样:

version: '4'

services:
  app:
    build:
      context: app
    ports:
      - "5000"
  nginx:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - app
    ports:
      - "80:80"

字符串
而nginx.conf文件如下:

events {
    worker_connections 1000;
}

http { 
    upstream flask_app {
        server app:5000;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://app:5000;
        }
    }
}


如何配置Docker和Nginx以实现所需的行为,允许我访问API而无需显式指定端口号?
谢谢你的帮助。

5us2dqdw

5us2dqdw1#

你已经在做了。
app的DNS将解析到容器的内部IP地址,nginx将在它们之间循环请求。
然而,你必须在启动时设置规模,因为nginx只会执行DNS查找 * 一次 *,除非你为Nginx plus/premium/whatever they callit付费。如果您更改了规模,或者容器重新启动新的IP,您需要重新启动Nginx容器以获取更改。
此外,IIRC甚至不需要ports配置部分,除非您希望这些端口暴露在外部。
综上所述,如果您希望扩展服务和/或拥有更智能的服务位置/内部负载平衡,那么您应该考虑进入Kubernetes。

相关问题