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