【问题标题】:MongoDB docker container doesn't show databasesMongoDB docker容器不显示数据库
【发布时间】:2019-06-10 22:23:22
【问题描述】:

我在这个博客之后设置了 MongoDB docker 容器: https://medium.com/@kristaps.strals/docker-mongodb-net-core-a-good-time-e21f1acb4b7b

当我运行 .net core 应用程序时,保存一个 todo,我设法查询它,似乎一切正常(创建了 todo 集合,创建了 db,保存了 todo)。但是,当我使用“docker exec -it mongodb bash”访问 mongo db 容器并尝试使用“show dbs”获取 dbs 时,它会检索空列表。此外,这个 docker compose 会启动 mongo express 容器,该容器也没有列出新的数据库和集合。您知道可能是什么问题吗?

干杯

【问题讨论】:

  • 你是如何连接到 mongodb 的?是否为 mongod 实例启用了身份验证?如果是,认证成功是否已满?尝试运行db.adminCommand( { listDatabases: 1 } )
  • 根据博客,认证是开启的,所以你应该使用用户名和密码来连接mongodb。来自 .net 核心应用程序的写入可能不成功,这可能是您在 mongodb 中看不到任何结果的原因。
  • @Mani 我现在尝试删除容器并在没有身份验证的情况下重新启动它们,它是相同的,写入仍然成功,因为从集合中返回所有项目的端点正确返回它们
  • 看起来 api 代码有问题,我停止了所有 docker 容器,它仍然设法保存和检索项目......我不知道这里有什么魔力,它们没有存储在内存,因为我也尝试重新启动 api
  • 您是否在本地机器上运行任何其他 mongodb 实例?

标签: mongodb docker


【解决方案1】:

您可能启用了身份验证(用户名和密码)。这意味着您必须先在 shell 中进行身份验证,然后才能列出数据库。

这是如何做到的(为谷歌员工添加了额外的步骤):

    $ docker ps // list images

    IMAGE
    my-mongodb-container

$ docker exec -it my-mongodb-container bash

// -it is a flag for 'interactive terminal', bash is the shell we'll use

root@example:/# mongo 
// enter mongodb shell

> use admin 
// switched to db admin

> db.auth("username", "password");
// 1

> show dbs
admin  0.000GB
config 0.000GB
local  0.000GB
mydb   0.000GB

> use mydb
// switched to db mydb

您现在可以在您的 mongodb 实例中运行 mongodb shell 命令 - 因此“显示集合”之类的操作将起作用。

希望对某人有所帮助!这东西有时很不透明:)

【讨论】:

  • 很好的答案!您能否扩展示例以列出表中的记录(a.la.“select * from ”),好吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-21
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多