---
# System prepended metadata

title: 透過 Docker 啟動的 MongoDB 備份方式
tags: [Docker, ' MongoDB']

---

---
title: 透過 Docker 啟動的 MongoDB 備份方式 
tags: Docker, MongoDB
description: backup mongodb on docker.
---

透過 Docker 啟動的 MongoDB 備份方式
=========

既然透過容器方式執行 mongodb 基本上就不太會裝mongo 在本機上
所以可以透過容器方式把檔案給備份出來

完整指令如下

```bash=
docker run --rm -v $(pwd):/data/db -w /data/db -u $(id -u) mongo mongodump -h 192.168.0.5 --db mydbname --out ./dump
```

**docker run** 指令執行一個容器
'--rm' 表示 當容器停止後自動刪除該容器屍體
'-v' 掛載硬碟，這邊透過 **$(pwd)** 取得當前下指令的位置映射到容器內的 **/data/db** 
'-w' 設定容器執行的工作目錄位置
'-u' 預設用戶是root，這邊設定為當前用戶，如果沒有設定，在非root用戶時會出現下面錯誤
> 2019-06-03T03:12:30.082+0000	Failed: error dumping metadata: error creating directory for metadata file dump/mydbname: mkdir dump: permission denied

**mongo mongodump** 後面指令都是屬於 mongo client的

'-h' 連接的DB主機位置
'--db' 指定的DB名稱
'--out' 寫出到指定目錄
'--gzip' 當然也可以使用 gzip 壓縮
'--archive' 或是包成 archive 檔案這類指令


**mongo mongorestore**

同樣的也可以透過這個方式，使用 mongorestore 把資料倒回去

```bash=
docker run --rm -v $(pwd):/backup -w /backup -u $(id -u) mongo mongorestore -h 192.168.0.5 -d dbname ./somebackupdir/name
```