2016-09-29 21 views
0

我們有一個MySQL作爲數據庫的Rails應用程序。的docker-compose.ymldb部分看起來像docker-compose:每次重新初始化MySQL db

db: 
    image: mysql 
    env_file: 
     - ma.env 
    volumes: 
     - ./dump-db:/docker-entrypoint-initdb.d 
     - ./my.cnf:/etc/mysql/my.cnf 
    restart: always 
    ports: 
     - "3306:3306" 
    environment: 
      - MYSQL_HOST= 

./dump-db文件夾下存在實際上是我們的數據庫的SQL轉儲。

問題是,我們需要每次運行docker-compose up時都有精確的轉儲。 MySQL泊塢窗圖像以這種方式工作,即將數據存儲在主機上,因此您的數據庫服務不是無狀態的。

我們需要的db服務丟棄docker-compose up以前的運行中完成所有變更新鮮開始,準確的轉儲。

+1

請從MySQL官方得出自己的飯盒。或者滾動你自己的自定義mysql。或者讓你的rails應用程序引導mysql。或者創建一個只引導你的mysql的新容器。或使用鐵軌種子。或... – user2105103

+0

我認爲這是寫。自定義圖像以做你想做的事(不要爲數據存儲使用卷)。 – dnephin

回答

0

解決

實際上,以上的想法給了我一些有識之士RTM和這裏去

  • 獲取自己的MySQL Dockerfile
  • 刪除它的VOLUME行,其中 它提到/var/lib/mysql shoul d安裝在主機上。
  • docker-compose up --force-recreate db
0

如果您不想在每次執行docker-compose up時保留數據,則必須刪除執行此命令所創建的卷。

要達到該目的,您可以執行以下命令,該命令將刪除volumes部分中聲明的卷的db服務。

泊塢窗,譜寫下來-v分貝

+0

謝謝!但有沒有辦法說服'docker-compose'自動殺死卷? –

+0

該命令錯誤。 「down」不帶位置參數。你可以做'docker-compose down -v'或'docker-compose rm -v db'。 – dnephin