1001Ferramentas
🍃Dev

docker-compose MongoDB

Gera um docker-compose pronto para MongoDB, com usuário e senha de root, a porta 27017 publicada e volume persistente. O nome do banco você cria depois de subir.

YAML

Subindo um MongoDB local sem decorar YAML

Você quer um Mongo rodando em cinco minutos para testar a aplicação, sem instalar nada na máquina, e sempre esquece o nome exato das variáveis que o container espera. Errar uma letra em MONGO_INITDB_ROOT_USERNAME resulta num banco que sobe sem autenticação nenhuma, e você só descobre quando alguém conecta sem senha. Aqui você informa a versão da imagem, o usuário e a senha do root, e o YAML do serviço sai pronto.

O detalhe que pega muita gente: as variáveis MONGO_INITDB_ROOT_USERNAME e MONGO_INITDB_ROOT_PASSWORD só são lidas na primeira inicialização, quando o diretório de dados está vazio. Se o volume mdata já existe, trocar a senha no compose não muda nada. Precisa derrubar com docker compose down -v. E o root nasce no banco admin, então a conexão pede authSource: mongodb://root:rootpass@localhost:27017/?authSource=admin

O que sai daqui é o básico: serviço, imagem, credencial de root, porta 27017 publicada e volume nomeado. Nome do banco inicial, replica set e scripts em docker-entrypoint-initdb.d ficam por sua conta. Senha com dois-pontos seguido de espaço, cerquilha ou aspas quebra o YAML, então coloque entre aspas ou mova para um arquivo .env. E publicar 27017:27017 abre o banco em todas as interfaces da máquina. Tudo é montado no navegador.

Perguntas frequentes

Mudei a senha no compose e o Mongo continua aceitando a antiga. Por quê?
Porque o volume de dados já foi inicializado. As variáveis MONGO_INITDB_ROOT_* só têm efeito quando o diretório de dados está vazio. Rode docker compose down -v para apagar o volume e subir de novo.
Qual string de conexão usar com esse compose?
mongodb://usuario:senha@localhost:27017/?authSource=admin. O authSource é obrigatório porque o usuário root é criado no banco admin, não no banco da sua aplicação.
Dá para usar isso em produção?
Não como está. A senha fica em texto puro no arquivo e a porta é publicada em todas as interfaces. Para produção, use secrets ou variáveis de ambiente externas e restrinja o bind.

Ferramentas Relacionadas