如何在docker容器中启动mongodb shell?

Mad*_*ari 54 mongodb docker

要启动容器,我输入以下命令:

sudo docker run -i -t -p 28000:27017 mongo:latest /usr/bin/mongod --smallfiles
Run Code Online (Sandbox Code Playgroud)

但是我想在这个容器中打开shell来输入mongo命令.我应该运行什么命令来做同样的事情?

vla*_*zam 119

您可以通过运行以下命令来运行交互式mongo shell:

docker run -it -p 28000:27017 --name mongoContainer mongo:latest mongo
Run Code Online (Sandbox Code Playgroud)

否则,如果您的容器已在运行,则可以使用以下exec命令:

docker exec -it mongoContainer mongo
Run Code Online (Sandbox Code Playgroud)


Ama*_*hod 17

从 Docker Hub 下载最新的 MongoDB Docker 镜像

sudo docker pull mongo
Run Code Online (Sandbox Code Playgroud)

现在设置 MongoDB 容器

docker run --name containername mongo
Run Code Online (Sandbox Code Playgroud)

通过bash shell客户端与数据库交互

docker exec -it containername bash
Run Code Online (Sandbox Code Playgroud)

启动 MongoDB shell 客户端

mongosh #now it is mongosh to access shell
Run Code Online (Sandbox Code Playgroud)


Rom*_*man 13

扩展和更新@vladzam答案,如果您的容器已经在运行docker,您可以使用带有登录和传递选项的 execmongosh命令,如下所示:

docker exec -it database-dev mongosh -u "myLogin" -p "myPass"
Run Code Online (Sandbox Code Playgroud)


小智 8

我也很努力但找到解决方案的事情:

docker pull mongo
docker run --name CONTAINERNAME --restart=always -d -p 8080:8080 mongo mongod --auth
sudo docker exec -i -t CONTAINERNAME bash
mongo
use admin
db.createUser({user:"user", pwd:"password", roles:[{role:"root", db:"admin"}]})
exit && exit
Run Code Online (Sandbox Code Playgroud)

现在,您已经创建了一个运行中的Docker容器,其中包含您需要的一切。现在,如果您想使用管理员用户从任何客户端进行连接,只需运行此命令

mongo -u "user" -p "password" HOSTIP --authenticationDatabase "admin"
Run Code Online (Sandbox Code Playgroud)

  • 作为安全预防措施,请使用“-p”标志,但不要输入密码,因为它将出现在 bash/shell 历史记录中。 (2认同)

Mad*_*ari 6

这是另一种方式:打开一个新终端

mongo 127.0.0.1:28000
Run Code Online (Sandbox Code Playgroud)

你的mongo shell现在在这个终端启动.

  • 此命令假设您的主机上安装了 mongo。当您在容器内运行 mongodb 时,除非单独安装,否则主机上不会有 mongo 可执行文件。 (7认同)
  • 那如何“在docker容器中启动mongodb shell”? (2认同)

Gui*_*sta 6

这取决于您运行的 MongoDB 版本。

请查看此处的差异:MongoDB Shell 与旧版 mongo Shell。

例如,对于Mongo 3 ,可执行文件是mongo:

$ docker run --rm mongo:3 which mongo mongosh mongod
/usr/bin/mongo
/usr/bin/mongod
Run Code Online (Sandbox Code Playgroud)

在Mongo 5中, 和mongo都mongosh存在:

$ docker run --rm mongo:5 which mongo mongosh mongod
/usr/bin/mongo
/usr/bin/mongosh
/usr/bin/mongod
Run Code Online (Sandbox Code Playgroud)

对于Mongo 6,你只能使用最新的mongosh:

$ docker run --rm mongo:6 which mongo mongosh mongod
/usr/bin/mongosh
/usr/bin/mongod
Run Code Online (Sandbox Code Playgroud)

现在,如果您想尝试一下,请运行 MongoDB 实例:

$ docker run -d -p 29000:27017 --name mongodb-6 mongo:6
Run Code Online (Sandbox Code Playgroud)

然后连接一个外壳:

$ docker exec -it mongodb-6 mongosh
Run Code Online (Sandbox Code Playgroud)

你会得到类似的东西:

Current Mongosh Log ID: 632456e42dbc88aa0bfe612f
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.5.4
Using MongoDB:          6.0.1
Using Mongosh:          1.5.4
...
Run Code Online (Sandbox Code Playgroud)

您还可以传递以下选项:

$ docker exec -it mongodb-6 mongosh --version
Run Code Online (Sandbox Code Playgroud)


Mir*_*ono 5

docker exec -it mongoContainer mongosh
Run Code Online (Sandbox Code Playgroud)

我尝试了 mongo、mongod 和 mongodb 但失败了。然后我将其更改为 mongosh 并且它有效!