This question is asked frequently.
How do I backup and restore a mongo DB in a docker container.
We first need to find the container label. You may need sudo for the following commands.
docker ps -a
NAMES
docker_mongo_1
So we need to do this:
docker exec docker_mongo_1 sh -c 'mongodump --archive' > db.dump
And in the current directory you should find db.dump
Restore should be the reverse process:
docker exec -i docker_mongo_1 sh -c 'mongorestore --archive' < db.dump
This is quite a good guide though I couldn’t get the compose variant to work (and my test container is built with compose)
https://jeromejaglale.com/doc/programming/mongodb_docker_mongodump_mongorestore
1 Like
Hi!
What did you experience with docker-compose
? A parse error? Something about corrupted backup?
Surprisingly neither. When I ran the commands as per the page it outputs nothing.
I need to play a bit more.
Try manually setting COMPOSE_INTERACTIVE_NO_CLI
to false
and run the commands again. If call_docker()
is not being used, stdout
and stderr
streams don’t get decoupled.
In dockerpty.pty.ExecOperation().start()
:
pumps.append(io.Pump(stream, io.Stream(self.stdout), propagate_close=False))
# FIXME: since exec_start returns a single socket, how do we
# distinguish between stdout and stderr?
# pumps.append(io.Pump(stream, io.Stream(self.stderr), propagate_close=False))
In my case this was the issue, didn’t get any output after the mongodump
command and the log information corrupted the backup file.
Another option could be using mongodump --archive --quiet
to remove the log altogether. Or forward stderr
from inside the sh -c
block.
E.g.-
COMPOSE_INTERACTIVE_NO_CLI=false docker-compose exec -T mongo mongodump --archive >db.dump
PS. sh -c
isn’t necessary, I don’t know why the super author used that.
Ref: Compose CLI environment variables | Docker Documentation