Joe
Joe

Reputation: 4254

Running a script from a mongodb docker-container

I have script that restores the database restore.sh:

mongorestore --port 27017 --db myapp `pwd`/db-dump/myapp

I want to run this in a short lived docker-container using the image mvertes/alpine-mongo.

To run a shortlived container the --rmis used:

docker run --rm --name mongo -p 27017:27017 \
  -v /data/db:/data/db \
  mvertes/alpine-mongo 

But how do I execute my script in the same command?

Upvotes: 1

Views: 6811

Answers (1)

jdno
jdno

Reputation: 4364

Check out the docker run reference:

 $ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

You can pass in the command you wish to execute. In your case, this could be the restore script. You must consider two things, though.

  • The script is not part of the container, so you need to mount into the container.
  • Specifying a command overwrites the CMD directive in the Dockerfile.

If you look at the Dockerfile, you see this as its last line:

CMD [ "mongod" ]

This means the default command that the container executes is mongod. When you specify a command for docker run, you "replace" this with the command you pass in. In your case: Passing in the restore script will overwrite mongod, which means Mongo never starts and the script will fail.

You have two options:

  1. Start one container with the database and another one with the restore script.
  2. Try to chain the commands.

Since you want to run this in a short-lived container, option 2 might be better suited for you. Just remember to start mongod with the --fork flag to run it in daemon mode.

$ docker run --rm --name mongo -p 27017:27017 \
-v /data/db:/data/db \
-v "$(pwd)":/mnt/pwd \
mvertes/alpine-mongo "mongod --fork && /mnt/pwd/restore.sh"

Hopefully, this is all it takes to solve your problem.

Upvotes: 1

Related Questions