Я использую Docker и mongo локально у меня нет, просто скачал из хаба последний образ, при сборке проекта и запуске никаких ошибок не возникает:
main.py:
"""Main file of all project"""
from fastapi import FastAPI
from dotenv import dotenv_values
from pymongo import MongoClient
config = dotenv_values(".env")
app = FastAPI()
@app.on_event("startup")
def startup_db_client():
"""Launches MongoDB after an app was started"""
app.mongodb_client = MongoClient(config["DATABASE_URL"])
app.database = app.mongodb_client[config["MONGO_INITDB_DATABASE"]]
print("Connected to the MongoDB database!")
@app.on_event("shutdown")
def shutdown_db_client():
"""Shuts down DB after an app was stopped."""
app.mongodb_client.close()
print("MongoDB database connection were closed.")
@app.get("/ping")
def ping():
return {"Test": app.database.list_collections()}
Но как только я пытаюсь зайти на
127.0.0.1:8000/ping, либо же произвожу любые действия с бд (достать, положить, посмотреть коллекции) даже на startup-е, то встречаю следующую ошибку:
...
File "/project/main.py", line 28, in ping
fastapi | return {"Test": app.database.list_collections()}
...
fastapi_container | pymongo.errors.OperationFailure: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}
.env:
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=admin
MONGO_INITDB_DATABASE=db
DATABASE_URL=mongodb://admin:admin@mongo:27017/db
docker-compose.yaml:
version: '3.9'
services:
fastapi:
build: .
container_name: fastapi
restart: always
command: uvicorn main:app --host 0.0.0.0 --reload
ports:
- 8000:8000
depends_on:
- mongodb
env_file:
- .env
volumes:
- ./:/project/
mongodb:
image: mongo:latest
container_name: mongo
ports:
- "27017:27017"
restart: always
env_file:
- .env
redis:
image: redis:alpine
container_name: redis
В чем может быть проблема? К монге user&pass отдаю и в uri, и при создании контейнера, в чем может быть дело?