2016-08-13 25 views
0

我已經設置了一個在Docker中運行的基本MariaDB實例 - 基本上從使用Kitematic UI啓動容器,更改設置並讓它運行。Docker設置更改後MariaDB數據是否丟失?

今天,我想做一個備份,所以我使用Kitematic來更改端口,以便我可以從機器訪問它以進行自動備份。在改變Kitematic的端口之後,似乎已經啓動了一個新的MariaDB容器(即我的所有數據似乎都被刪除了)。

這是預期的行爲?而且,更重要的是,是否有任何方法可以恢復看似缺失的數據,還是將其徹底刪除?另外,如果實際上刪除了數據,那麼更改設置的首選方式(如暴露的端口)是什麼,而不會丟失所有更改? docker commit

注:

  • 運行搬運工1.12.0測試版OS X
  • docker -ps a顯示爲 「最多X分鐘」 的時候,原來的已經達到了好幾天的數據庫狀態

在此先感謝!

UPDATE:

它看起來像所推薦的程序保留的數據(而不創建卷或類似的)是:

  1. 提交更改(例如docker commit <containerid> <name/tag>
  2. 取容器離線
  3. 更新設置,如曝光端口或其他
  4. 運行圖像與承諾修改

...取自this answer

回答

0

是的,這是預期的行爲。如果您希望數據持久存在,則應從主機(通過--volume選項docker run)或從另一個容器掛載卷,並將數據庫文件存儲在此捲上。

docker run --volume /path/on/your/host/machine:/var/lib/mysql mariadb 

失去的變化實際上是容器的核心特徵,所以它不能被忽略。通過這種方式,您可以確保在每個docker run之間您都可以在沒有任何變化的情況下獲得全新的環境。如果你希望你的修改是永久性的,你應該在圖片的Dockerfile中進行修改,而不是在容器本身。

欲瞭解更多信息,請訪問官方文檔:https://docs.docker.com/engine/tutorials/dockervolumes/

+0

那麼,是不是安全地說,更改設置在Kitematic中刪除當前容器,更新設置,並啓動一個新的容器實例? – blakek

+0

是的,因爲它需要用不同的參數集調用'docker run'命令。 –

0

它看起來像你不裝載容器捲到特定的路徑。您可以閱讀量和數據存儲到容器here

你需要帶音量選項運行容器

$ docker run --name some-mariadb -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb:tag 

其中/my/own/datadir是主機上的目錄