如何在Docker容器中启动MongoDB Shell?

116
为了启动容器,我正在输入以下命令:
sudo docker run -i -t -p 28000:27017 mongo:latest /usr/bin/mongod --smallfiles

但我想在这个容器中打开shell,以输入mongo命令。应该运行什么命令来实现相同的功能?

7个回答

225
你可以通过运行以下命令来启动交互式的Mongo shell:
docker run -it -p 28000:27017 --name mongoContainer mongo:latest mongosh

否则,如果您的容器已经在运行,您可以使用exec命令:
docker exec -it mongoContainer mongosh

错误:未找到命令:exec 错误:未找到命令:-it 用法:docker [选项] 命令 [arg...] -H=[unix:///var/run/docker.sock]:绑定/连接的tcp://host:port或unix://path/to/socket使用 - Madhavi Jouhari
1
你需要升级,我们已经更新到1.8版本,并对Docker的底层进行了许多更改。或者你可以使用NSentry(不确定它是否支持你的Docker版本)。 - booyaa
正如booyaa所提到的,你应该更新主机上的Docker,因为你目前使用的是一个旧版本,它没有提供最新可用的功能。 - vladzam
1
Mongo不再可用,请改用mongosh。 - Herii
1
正如@Herii所说,docker exec -it mongoContainer mongo会导致bash: mongo: command not found。请更新您的答案使用mongosh - Bartimaeus
显示剩余3条评论

27

我曾经也遇到同样的问题,但是我找到了解决办法:

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

现在您已经创建了一个运行中的Docker容器并拥有所需的一切。如果您希望使用管理员用户从任何客户端连接,只需运行以下命令:

mongo -u "user" -p "password" HOSTIP --authenticationDatabase "admin"

3
为了安全起见,请使用"-p"标志,但不要输入您的密码,因为它将出现在bash / shell历史记录中。 - Jonathan Smith

14

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

sudo docker pull mongo

现在设置MongoDB容器

docker run --name containername mongo

通过Bash shell客户端与数据库进行交互

docker exec -it containername bash

启动 MongoDB shell 客户端

mongosh #now it is mongosh to access shell

13

如果您的容器已经在 docker 中运行,可以使用带有登录和密码选项的 exec mongosh 命令来扩展和更新 @vladzam 的答案:

docker exec -it database-dev mongosh -u "myLogin" -p "myPass"

6

这取决于你正在运行哪个版本的MongoDB。

请查看这里的区别:The MongoDB Shell versus the Legacy mongo Shell

例如,使用Mongo 3,可执行文件是mongo

$ docker run --rm mongo:3 which mongo mongosh mongod
/usr/bin/mongo
/usr/bin/mongod

Mongo 5 中,同时存在 mongomongosh

$ docker run --rm mongo:5 which mongo mongosh mongod
/usr/bin/mongo
/usr/bin/mongosh
/usr/bin/mongod
Mongo 6 只能使用最新的 mongosh
$ docker run --rm mongo:6 which mongo mongosh mongod
/usr/bin/mongosh
/usr/bin/mongod

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

$ docker run -d -p 29000:27017 --name mongodb-6 mongo:6

然后连接一个终端:

$ docker exec -it mongodb-6 mongosh

你将会得到类似这样的结果:
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
...

您还可以传递选项,例如:

$ docker exec -it mongodb-6 mongosh --version

5
docker exec -it mongoContainer mongosh

我尝试了mongo、mongod和mongodb,但都失败了。然后我改成了mongosh,它就可以用了!


0
假设您已经在主机上安装了Mongo,这是我几年前提出这个问题时的情况。这是我尝试过的另一种方法:打开一个新终端。
mongo 127.0.0.1:28000

您的Mongo Shell现在在此终端中启动。

15
如何在 Docker 容器中启动 MongoDB Shell? - qqilihq
@qqilihq:上述命令在后台启动了Mongo容器。通过这个命令,我能够连接到正在运行的容器,并在其中执行Mongo查询。尽管我理解您的观点,但这个命令并没有“启动”它,而是连接到已经运行的容器。 - Madhavi Jouhari
7
假设您已在主机计算机上安装了MongoDB。当您在容器内运行MongoDB时,除非您单独安装它,否则您的主机计算机上将没有Mongo可执行文件。 - Serdar Kalaycı
1
正如其他人正确地说的那样,这个答案强烈假设已经在本地机器上安装了Mongo。与Docker无关。 - Andrea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接