1

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?

0

1 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.