Mongorestore in a Dockerfile

前端 未结 5 831
借酒劲吻你
借酒劲吻你 2021-02-05 07:10

I want to create a Docker image that starts a mongo server and automatically restores from a previous mongodump on startup.


Here is my Dockerfile for

5条回答
  •  故里飘歌
    2021-02-05 07:52

    With help from this answer, Marc Young's answer, and the Dockerfile reference I was able to get this working.


    Dockerfile

    FROM mongo
    
    COPY dump /home/dump
    COPY mongo.sh /home/mongo.sh
    RUN chmod 777 /home/mongo.sh
    
    CMD /home/mongo.sh
    

    mongo.sh

    #!/bin/bash
    
    # Initialize a mongo data folder and logfile
    mkdir -p /data/db
    touch /var/log/mongodb.log
    chmod 777 /var/log/mongodb.log
    
    # Start mongodb with logging
    # --logpath    Without this mongod will output all log information to the standard output.
    # --logappend  Ensure mongod appends new entries to the end of the logfile. We create it first so that the below tail always finds something
    /entrypoint.sh mongod --logpath /var/log/mongodb.log --logappend &
    
    # Wait until mongo logs that it's ready (or timeout after 60s)
    COUNTER=0
    grep -q 'waiting for connections on port' /var/log/mongodb.log
    while [[ $? -ne 0 && $COUNTER -lt 60 ]] ; do
        sleep 2
        let COUNTER+=2
        echo "Waiting for mongo to initialize... ($COUNTER seconds so far)"
        grep -q 'waiting for connections on port' /var/log/mongodb.log
    done
    
    # Restore from dump
    mongorestore --drop /home/dump
    
    # Keep container running
    tail -f /dev/null
    

提交回复
热议问题