我刚刚用Python和FastAPI创建了一个简单的API,当我试图用mongodb和mongoexpress在docker-compose中运行它时,我得到了一个错误。当我运行docker-compose时,只有mongodb和mongoexpress和我的API在本地,我可以连接到mongodb并在MongoExpress中轻松检查我的数据。但是当我使用docker-compose在容器上建立我的API并建立Mongodb时,我无法连接到我的API并向那里发送数据。我在mongo_express容器中运行docker-compose的时候得到了这样的错误--verbose。
(node:8) [MONGODB DRIVER] Warning: Current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
My docker-compose is like:
version: '3'
services:
crud-api:
container_name: crud-api
build: .
volumes:
- .:/app
ports:
- 80:80
depends_on:
- mongodb
mongodb:
image: mongo
container_name: mongodb
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=example
mongo-express:
image: mongo-express
container_name: mongo_express
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=root
- ME_CONFIG_MONGODB_ADMINPASSWORD=example
- ME_CONFIG_MONGODB_SERVER=mongo
restart: unless-stopped
也是我的Docker文件。
FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir --upgrade -r requirements.txt
RUN export MONGO_URI=mongodb://root:example@mongodb:27017/CRUDApi?authSource=admin
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
为了在我的代码中建立这种联系,我有两个类。
1.用于启动。
import mongoengine
from app.utils.logger import logger
from app.db.mongo_configs import MongoConfigs
class Mongo:
def __init__(self):
self.settings = MongoConfigs
self.__connect()
def __connect(self):
logger.info("Connecting on mongo")
mongoengine.connect(host=MongoConfigs.MONGO_URI)
logger.info("Mongo connected")
2º with the configs:
import os
class MongoConfigs:
MONGO_URI = os.getenv('MONGO_URI')
def __init__(self):
self.validate_mongo()