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.

  • Docker config : Celery + RabbitMQ
  • Best way to share Docker volume between different computers?
  • Connect to WordPress Docker Container
  • How can I run a docker container and commit the changes once a script completes?
  • Missing Carriage Return in Docker for Mac Containers
  • Docker Container: time/timezone wrong
  • 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?

  • Skip error in dockerfile during the build
  • Is there a way to prevent outside access to container memory
  • Docker Swarm Mode routing mesh vs linkerd
  • How to share a host directory between multiple docker container?
  • Library installation in docker
  • Creating multiple Docker container
  • 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.