如何在码头容器中启动 mongodb shell?

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

sudo docker run -i -t -p 28000:27017 mongo:latest /usr/bin/mongod --smallfiles

但是我想打开这个容器中的 shell 来输入 mongo 命令。 我应该运行什么命令来执行相同的操作?

124761 次浏览

You can run the interactive mongo shell by running the following command:

docker run -it -p 28000:27017 --name mongoContainer mongo:latest mongo

Otherwise, if your container is already running, you can use the exec command:

docker exec -it mongoContainer mongo

Assuming you have mongo installed on your host computer, which was in my case when I asked this question years ago. This is an alternate way I tried: Open a new terminal

mongo 127.0.0.1:28000

Your mongo shell starts in this terminal now.

The thing that I struggled too but found a solution:

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

Now you have created a running Docker container with everything you need. Now if you want to connect from any client with an admin user, just run this

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

Download the latest MongoDB Docker image from Docker Hub

sudo docker pull mongo

Now set up MongoDB container

docker run --name containername mongo

Interact with the database through the bash shell client

docker exec -it containername bash

Launch the MongoDB shell client

mongo

Extending and updating @vladzam answer and if your container is already running in docker, you can use the exec mongosh command with login and pass options like this:

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

It depends which version of MongoDB you're running.

Please see the differences here : The MongoDB Shell versus the Legacy mongo Shell.

For example, with Mongo 3 the executable was mongo :

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

With Mongo 5 both mongo and mongosh are present :

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

With Mongo 6 you can only use the newest mongosh :

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

Now if you want to try it, run a MongoDB instance :

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

Then connect a shell :

$ docker exec -it mongodb-6 mongosh

You'll get something like :

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
...

You can also pass options like :

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