2017-05-30 76 views
0

我正在使用本機Docker for Windows(在Windows 10上)進行WordPress開發。我有兩個容器:WordPress和MySQL。 MySQL容器有一個數據卷,其中DB數據在運行之間存儲。如何在Windows 10上重新啓動之間持久化MySQL容器

我使用'docker-compose up -d'開始容器並停止'docker-compose down'。當以這種方式停止時,MySQL數據會正確保存到數據卷中,並且當我下次啓動時,我會看到所有更改都保留下來。

但是,如果我先重新啓動Windows 10而不先停止MySQL容器,則似乎不會保存自上次啓動以來對數據庫所做的更改。 Docker for Windows足夠聰明地啓動重啓之前運行的相同卷,但它是否真的不關心如何正確關閉它們,以便保存數據庫數據?這是真的嗎?或者我誤解了任何東西?

避免系統重啓時丟失數據的最可靠方法是什麼?在重新啓動之前手動停止所有MySQL容器是一項乏味的任務,尤其是在運行多個服務器時。也許我可以創建一個腳本來解析'docker ps'的輸出,並且在重啓之前會停止所有的MySQL容器,但是恐怕我可能在這裏重新發明了一個輪子。

處理情況的最佳方式是什麼?我搜索了高和低,但沒有發現任何話題。我是唯一一個需要這個的人嗎?我在這裏錯過了什麼嗎?

任何幫助真的很感激!謝謝!

P.S.我的搬運工,compose.yml文件是:

version: '2' 

services: 
    db: 
    image: mysql:5.7 
ports: 
    - "9013:3306" 
volumes: 
    - ./database:/var/lib/mysql 
restart: always 
environment: 
    MYSQL_ROOT_PASSWORD: somewordpress 
    MYSQL_DATABASE: wordpress 
    MYSQL_USER: wordpress 
    MYSQL_PASSWORD: wordpress 

    wordpress: 
depends_on: 
    - db 
image: wordpress:latest 
volumes: 
    - ./wordpress:/var/www/html 
ports: 
    - "8013:80" 
restart: always 
environment: 
    WORDPRESS_DB_HOST: db:3306 
    WORDPRESS_DB_USER: wordpress 
    WORDPRESS_DB_PASSWORD: wordpress 
    WORDPRESS_TABLE_PREFIX: wpd1_ 
+0

你可以顯示你的'docker-compose.yml'文件嗎? –

+0

@ janshair汗,還說我的問題文本 – Kirlat

回答

0

我做了一些額外的調查,我覺得我問的問題關於從未存在。它實際上是一個不同類型的Windows版Docker問題:https://github.com/docker/for-win/issues/584

這是發生了什麼事。 1.當機器重新啓動時,所有持久的MySQL數據實際上已經正確保存。 2.但是在重新啓動計算機後,Docker無法安裝卷,因爲容器在自動啓動後幾秒鐘就可用(請在此處查看註釋:https://github.com/docker/for-win/issues/584#issuecomment-286792858)。由於這個原因,MySQL數據庫是空的(卷未安裝,沒有數據可讀)。

如果要手動重啓容器,所有持久數據都會正確加載。所以這不是我想到的問題,而是一個不同的問題,幸運的是,一個不太嚴重的問題。

感謝大家試圖幫助我解決這個問題!

0

你可以使用你的MySQL數據named volume

volumes: 
    - data-volume:/var/lib/db 

(目標應該是一個MySQL的存儲其數據)

+0

這是我在用的: ' 卷: - ./database:/var/lib/mysql ' 看來只有後要保存的數據量我做'碼頭作曲家'。但是,在Windows重新啓動時,Docker for Windows不會以'docker-compose down'的方式關閉容器,因此數據會丟失。現在就手動做,但如果我在重新啓動機器之前忘記了,就會發生不好的事情。尋找一種方法來避免這種情況。 – Kirlat

0

您需要啓用通過右鍵單擊泊塢圖標從多克爾發動機Windows文件系統的訪問(在右下角),並安裝共享Windows驅動器。如果這已經做了,你可能需要提供驅動即

volumes: 
    - c:\data:/var/lib/db 

也可以嘗試刪除到./即改變完整路徑:

volumes: 
    - wordpress:/var/www/html 
+0

它似乎不能用於指定'wordpress:/ var/www/html'。如果它是具有docker-compose.yml文件的目錄中的子文件夾,它必須是'./wordpress:/ var/www/html'。 這似乎是這個問題是與https://github.com/docker/for-win/issues/584有關,而不是我最初雖然它(請參閱我的答案上面)。 謝謝你幫我解決這個問題! – Kirlat

相關問題