J'ai un problème de connexion à une mongoDb depuis mon application dotnet core 3.1. Le mongoDb et l'application API sont tous deux exécutés dans un conteneur. Chaque conteneur est accessible depuis l'hôte local et utilise les paramètres réseau par défaut de Docker.
Mon fichier docker-compose mongoDb
version: "3.4"
services:
mongoDatabase:
restart: always
image: mongo:latest
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=rootPassword
volumes:
- ./mongoDatabase:/data/db
ports:
- "27017:27017"
Le fichier docker-compose de mon application
writer.api:
image: ${DOCKER_REGISTRY-}writerapi
build:
context: .
dockerfile: Services/Writer/Writer.API/Dockerfile
environment:
- MONGODB_CONNECTION=mongodb://root:rootPassword@host.docker.internal:27017/NewsGroup
- MONGODB_DATABASE="NewsGroup"
- MONGODB_COLLECTION_NAME="News"
ports:
- "10020:80"
La raison pour laquelle les deux sont dans un fichier compose est qu'il y a plus de services fonctionnant dans ce compose.
Mon code suit le modèle Microsoft a proposé des documents sur mongodb . Et le code est le suivant :
public class MongoDatabaseService : IMongoDatabaseService
{
private IMongoDatabase _context;
private IMongoCollection<ArticleGroup> _articleGroup;
public MongoDatabaseService()
{
string mongoConnectionString = Environment.GetEnvironmentVariable("MONGODB_CONNECTION");
if (string.IsNullOrEmpty(mongoConnectionString))
{
throw new Exception("MongoConnectionstring is empty");
}
string mongoDatabase = Environment.GetEnvironmentVariable("MONGODB_DATABASE");
if (string.IsNullOrEmpty(mongoDatabase))
{
throw new Exception("MongoDatabase name is empty");
}
var client = new MongoClient(mongoConnectionString);
_context = client.GetDatabase(mongoDatabase);
string collectionName = Environment.GetEnvironmentVariable("MONGODB_COLLECTION_NAME");
if (string.IsNullOrEmpty(mongoDatabase))
{
throw new Exception("MongoDatabase collection is empty");
}
_articleGroup = _context.GetCollection<ArticleGroup>(collectionName);
}
public void AddArticleGroup(ArticleGroup newGroup)
{
_articleGroup.InsertOne(newGroup);
}
}
Pendant l'opération d'insertion, j'obtiens l'exception suivante
MongoDB.Driver.MongoAuthenticationException: 'Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1.'
MongoCommandException: Command saslStart failed: Authentication failed..
J'ai également installé un client visuel pour voir les actions réelles et je peux confirmer que les bases de données/collections spécifiées existent et sont accessibles par l'utilisateur.
Quelqu'un sait-il quelle peut être la raison de ce problème ?