MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB e Docker via erro de autenticação do docker-compose e não inicializando o db

  • Para a parte de autenticação:você tentou adicionar --authenticationDatabase admin para poder entrar?

  • Sobre MONGO_INITDB_DATABASE não será eficaz a menos que você tenha um script em /docker-entrypoint-initdb.d/ conforme mostrado no docker-entrypoiny .sh que é usado na imagem do mongodb para que você possa ter um script bash em docker-entrypoint-initdb.d/ com isso dito.

  • Usar o usuário root como proprietário do banco de dados do seu aplicativo não é uma questão de segurança, pois ele terá a capacidade de controlar tudo na instância do mongodb.

    IMHO uma abordagem melhor seria adicionar variáveis ​​extras como as seguintes:
    • MONGO_APPLICATION_DATABASE
    • MONGO_APPLICATION_USERNAME
    • MONGO_APPLICATION_PASSWORD

    Em seguida, adicione um script bash que criará o usuário e o atribuirá ao banco de dados usando variáveis ​​de ambiente (você precisa montá-lo em docker-entrypoint-initdb.d):
    # initmongo/setup.sh
    mongo admin -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --eval "db.getSiblingDB('$MONGO_APPLICATION_DATABASE').createUser({user: '$MONGO_APPLICATION_USERNAME', pwd: '$MONGO_APPLICATION_PASSWORD', roles: [{role: 'readWrite', db: '$MONGO_APPLICATION_DATABASE'}]});"
    

    No docker-compose.yml, adicione um volume à sua lista atual de volumes
    #docker-compose.yml
    volumes:
      - ".${MONGO_DATA_DIR}:${MONGO_DATA_DIR}"
      - "./initmongo/:/docker-entrypoint-initdb.d/"
    

    E finalmente remova esta variável MONGO_INITDB_DATABASE pois não há necessidade disso

    Para logar use o seguinte comando:
    docker exec -it container_name mongo -u "$MONGO_APPLICATION_USERNAME" -p "$MONGO_APPLICATION_PASSWORD" --authenticationDatabase "$MONGO_APPLICATION_DATABASE" "$MONGO_APPLICATION_DATABASE"
    

  • Para o .env arquivo não tenho certeza do que poderia causar esse problema. você tem algum aviso ao usá-lo? Considere também verificar este comentário ou este