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.

  • Let two Containers getting linked to eachother
  • Docker not mapping port using gunicorn
  • Docker swarm mode couldnt connect to another container
  • Unable to start container
  • Installing sensu, sensu-dashboard does not install
  • Dockerfile “rm -Rf” fail
  • 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?

  • How to access/Install/Setup Web Panel on live application RethinkDB
  • Docker fails to start container occasionally with error “lstat /dev/dm-1: no such file or directory”
  • Enable Thrift in Cassandra Docker
  • Docker volume not used with Redis (mount does show up with inspect)
  • Is it possible to define Docker data volume on S3?
  • supervisord not stopping docker run
  • One Solution collect form web for “Running a script from a mongodb docker-container”

    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.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.