为了启动容器,我正在输入以下命令:
sudo docker run -i -t -p 28000:27017 mongo:latest /usr/bin/mongod --smallfiles
但我想在这个容器中打开shell,以输入mongo命令。应该运行什么命令来实现相同的功能?
docker run -it -p 28000:27017 --name mongoContainer mongo:latest mongosh
exec
命令:docker exec -it mongoContainer mongosh
我曾经也遇到同样的问题,但是我找到了解决办法:
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"
从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
如果您的容器已经在 docker
中运行,可以使用带有登录和密码选项的 exec mongosh
命令来扩展和更新 @vladzam
的答案:
docker exec -it database-dev mongosh -u "myLogin" -p "myPass"
这取决于你正在运行哪个版本的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 中,同时存在 mongo
和 mongosh
:
$ 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
docker exec -it mongoContainer mongosh
我尝试了mongo、mongod和mongodb,但都失败了。然后我改成了mongosh,它就可以用了!
mongo 127.0.0.1:28000
docker exec -it mongoContainer mongo
会导致bash: mongo: command not found
。请更新您的答案使用mongosh
。 - Bartimaeus