111

To start the container, I am typing the following command:

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

But I want to open the shell in this container to type the mongo commands. What command should I run to do the same?

Madhavi Jouhari
  • 2,282
  • 5
  • 25
  • 40

7 Answers7

216

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 mongosh
vladzam
  • 5,462
  • 6
  • 30
  • 36
  • Error: Command not found: exec Error: Command not found: -it Usage: docker [OPTIONS] COMMAND [arg...] -H=[unix:///var/run/docker.sock]: tcp://host:port to bind/connect to or unix://path/to/socket to use – Madhavi Jouhari Oct 05 '15 at 09:20
  • What version of docker do you currently have installed? The exec command has been introduced in version 1.3.0 – vladzam Oct 05 '15 at 09:22
  • 1
    you need to upgrade, we're up to 1.8 and there's been a lot of changes to the plumbing of docker. that or use nsentry (not sure if it support your version of docker). – booyaa Oct 05 '15 at 09:27
  • As booyaa mentioned, you should update docker on your host as you are currently using an old version that does not offer the latest available features – vladzam Oct 05 '15 at 09:29
  • I updated the docker version and it helped. Thanks a lot! – Madhavi Jouhari Oct 05 '15 at 09:45
  • 1
    mongo no longer works, use mongosh instead. – Herii Jan 16 '23 at 22:40
  • 1
    As @Herii said `docker exec -it mongoContainer mongo` results in `bash: mongo: command not found`. Please update your answer to use `mongosh` – Bartimaeus Mar 16 '23 at 21:06
  • in Windows 11 and Docker desktop version 4.17, this command worked for me: "docker exec -it "YourContainerName" mongo" – mi_mo May 26 '23 at 10:00
25

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"
  • 3
    As a security precaution, use the `-p` flag, but don't enter your password as it will be present in your bash / shell history. – Jonathan Smith Nov 04 '19 at 12:52
14

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

mongosh #now it is mongosh to access shell
eblue
  • 5
  • 1
  • 2
Aman Rathod
  • 220
  • 4
  • 16
13

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"
Roman
  • 19,236
  • 15
  • 93
  • 97
6

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
Guillaume Husta
  • 4,049
  • 33
  • 40
5
docker exec -it mongoContainer mongosh

i tried mongo, mongod, and mongodb but failed. Then i changed it to mongosh and it works!

Mirza Setiyono
  • 181
  • 3
  • 10
0

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.

Madhavi Jouhari
  • 2,282
  • 5
  • 25
  • 40
  • 15
    How does that "start a mongodb shell in docker container"? – qqilihq Aug 31 '17 at 09:27
  • @qqilihq: The above mentioned commands started mongo container as a daemon in the backend. With this command I was able to connect to the running container, and execute the mongo queries in it. Although I get your point, this command doesnt "start" it, it connects to already running container. – Madhavi Jouhari Aug 31 '17 at 13:39
  • 7
    This command assumes you have mongo installed on your host computer. When you run mongodb inside a container, you won't have mongo executable on your host computer unless you install ot seperately. – Serdar Kalaycı Aug 20 '19 at 13:20
  • 1
    As others correctly say, this answer makes the strong assumption to already have mongo installed on the local machine. Nothing to do with Docker. – Andrea Apr 29 '21 at 08:43