我想从我的FastAPI服务器上抓取一些指标。但是,我不想将其与其余API相比向公众展示。
因此,我决定创建第二个服务器并尝试运行(受此here的启发):
app = FastAPI()
app2 = FastAPI()
app2.mount("/metrics", metrics_app)
然后像这样用docker-compose设置它
version: '3.8'
services:
scraiber_gpt:
build:
context: ./src
dockerfile: Dockerfile.test
command: uvicorn app.main:app --reload --workers 1 --host 0.0.0.0 --port 8000 & uvicorn app.main:app2 --reload --workers 1 --host 0.0.0.0 --port 8001
volumes:
- ./src:/usr/src/app
ports:
- 8004:8000
- 8005:8001
但是,我看不到app 2中的任何内容。
有什么办法可以让它工作吗?🙂
1条答案
按热度按时间4ioopgfo1#
问题出在
uvicorn app.main:app --reload --workers 1 --host 0.0.0.0 --port 8000 & uvicorn app.main:app2 --reload --workers 1 --host 0.0.0.0 --port 8001
命令上,它运行第一个uvicorn
命令并等待它完成,但它没有完成,因为它是一个服务器应用程序。如果你想在不同的端口上公开两个应用程序,并且你已经在运行docker compose,最简单的方法是启动两个容器:
如果你在nginx或类似的反向代理之后运行,另一个解决方案是在一个
FastAPI
应用程序中运行所有内容,然后只公开你想要对外部请求公开的路由。