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