#+TITLE: 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: #+begin_quote docker-tags-fetch mongo -l 10 -f '^[0-9]+\.[0-9]+\.[0-9]+$' #+end_quote change it in docker file, then #+begin_quote docker build . -t docker.0k.io/mongo:"$TAG"-myc #+end_quote ** General Access You can access mondo db, if running, through #+begin_src sh SERVICENAME=mongo compose exec "$SERVICENAME" /usr/bin/mongo --quiet --eval "some js code" #+end_src if not running, you might want to run it. The following could be added to actions *** list databases #+begin_src sh SERVICENAME=mongo compose exec -T mongo /usr/bin/mongo --quiet \ --eval "JSON.stringify(db.adminCommand({listDatabases: 1}))" | \ jq -r '.databases[] | .name' #+end_src *** 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. #+begin_src sh 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" #+end_src Then inside docker: #+begin_src sh apk add mongodb-tools #+end_src Then for each databases: #+begin_src sh DBNAME="xxx" cd /tmp/mongo mongodump -h mongo -d "$DBNAME" -o mdump/ #+end_src *** Drop database #+begin_src sh DBNAME=xxx PROJECTNAME=myc SERVICENAME=mongo docker exec -i "${PROJECTNAME}_${SERVICE}_1" /usr/bin/mongo --quiet < \ <(echo " use $DBNAME; db.dropDatabase(); ") #+end_src Note: if some connection are active to the database, it might not be deleted, you should check by relisting the database. *** Restore database #+begin_src sh 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/ #+end_src 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.