通过 Docker Compose 部署到 AWS ECS 插件具有不稳定的网络和容器



我正在学习如何使用ECS插件将容器部署到AWS。

我的设置与教程略有不同(甚至更简单)。我只有

  1. Uvicorn web服务器上的FastAPI
  2. GROBID web server

唯一的技巧(不应该那么复杂)是设置一个共享文件系统,因为GROBID web服务器的目的是将pdf转换为XML,并将它们存储在FastAPI通过HTTP调用时需要访问的文件系统中。

这是我的docker撰写文件:

version: "3"
services:
fastapi:
image: <account>.dkr.ecr.eu-central-1.amazonaws.com/repo:latest # fastapi+uvicorn image
ports:
- "8000:8000"
volumes:
- efs:/root
networks:
- backend
grobid:
image: grobid/grobid:0.6.2
ports:
- "8070:8070"
networks:
- backend
networks:
backend:
driver: bridge
volumes:
efs:
driver_opts:
# Filesystem configuration
backup_policy: ENABLED
lifecycle_policy: AFTER_14_DAYS
throughput_mode: bursting

我不认为它有什么问题,但由于某种原因,FastAPI服务器似乎无法正确到达GROBID。它给出了以下错误HTTPConnectionPool(host='127.0.0.1', port=8070): Max retries exceeded with url: /api/processFulltextDocument (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f11e1a777c0>: Failed to establish a new connection: [Errno 111] Connection refused'))。我知道这个端点是可访问的,因为它在浏览器中工作。

此外,如果我看到日志,两个容器似乎都重新启动了很多,这让我越来越相信容器只是不稳定,插件不知怎么的坏了。

有没有人遇到过类似的问题,或者有什么提示?我也接受关于如何部署两个共享相同文件系统的web服务器的替代方案的建议,如果可能的话,系统的容量可以扩展到数百万用户而不会停机。

谢谢

当您在两个容器中运行应用程序时,它们不再位于彼此的localhost上。您必须使用内部网络名称,该名称与容器名称相同。因此,代替您的FastAPI应用程序试图连接到http://127.0.0.1:8070,将其设置为http://grobid:8070

最新更新