2.4 KiB
Mongo Charm
Quick information
Upgrade
Since 4.0.6 based on alpine 3.9, alpine is not packaging mongo anymore. So we use the official version (that is huge). We still must change entrypoint to enforce proper directory paths.
A ``Dockerfile`` is provided for this mean.
You can fetch latest official tags:
docker-tags-fetch mongo -l 10 -f '^[0-9]+\.[0-9]+\.[0-9]+$'
change it in docker file, then
docker build . -t docker.0k.io/mongo:"$TAG"-myc
General Access
You can access mondo db, if running, through
SERVICENAME=mongo compose exec "$SERVICENAME" /usr/bin/mongo --quiet --eval "some js code"
if not running, you might want to run it.
The following could be added to actions
list databases
SERVICENAME=mongo compose exec -T mongo /usr/bin/mongo --quiet \ --eval "JSON.stringify(db.adminCommand({listDatabases: 1}))" | \ jq -r '.databases[] | .name'
Dump database
This one will use the probably already builded image from your project on your host to run a competing mongo with a host directory to store the dump.
PROJECTNAME=myc SERVICENAME=mongo docker run --rm --name mongo_client -ti \ -v /tmp/mongo:/tmp/mongo --network "${PROJECTNAME}_default" \ -u root \ --entrypoint /bin/sh "${PROJECTNAME}_$SERVICENAME"
Then inside docker:
apk add mongodb-tools
Then for each databases:
DBNAME="xxx" cd /tmp/mongo mongodump -h mongo -d "$DBNAME" -o mdump/
Drop database
DBNAME=xxx PROJECTNAME=myc SERVICENAME=mongo docker exec -i "${PROJECTNAME}_${SERVICE}_1" /usr/bin/mongo --quiet < \ <(echo " use $DBNAME; db.dropDatabase(); ")
Note: if some connection are active to the database, it might not be deleted, you should check by relisting the database.
Restore database
SOURCE_DIR=/tmp/gogocarto docker run --rm -ti \ -v "$SOURCE_DIR":/tmp/backups/gogocarto \ -w /tmp/backups \ --entrypoint mongorestore \ --network myc_default \ myc_mongo \ --host rs01/mongo /tmp/backups/
There should not have any errors.
Please note that '/tmp/backups' in the last example should contain one directory per database.
Note also that you should drop database (see previous section) prior to restore them.