无法使用docker-compose将API与MongoDB上的MongoEngine进行连接

0 人关注

我刚刚用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()