我一直在爲這個問題苦苦掙扎了一段時間。我想要使用一組特定的數據進行性能測試。 爲了實現這一點,我使用Docker-compose,並且導出了幾個.sql
文件。啓動時使用靜態數據進行Docker集成測試
當我第一次使用docker-compose build
和docker-compose up
生成並運行容器時,數據集很好。然後我運行我的測試(也插入)數據。運行我的測試後,我想再次執行它,因此我使用docker-compose up
重新啓動容器。但這一次,由於某種原因,我不明白,上次插入的數據(通過我的測試)仍然存在。我現在得到不同的行爲。
此刻,我有Dockerfile如下:
FROM mysql:5.7
ENV MYSQL_DATABASE dev_munisense1\
MYSQL_ROOT_PASSWORD pass
EXPOSE 3306
ADD docker/data/ /docker-entrypoint-initdb.d/
因爲我讀了MySQL的泊塢窗圖像運行在/docker-entrypoint-initdb.d/
一切。它第一次正常工作。
我自己也嘗試一下這些帖子建議:
How do i migrate mysql data directory in docker container?
http://txt.fliglio.com/2013/11/creating-a-mysql-docker-container/
How to create populated MySQL Docker Image on build time
How to make a docker image with a populated database for automated tests?
和幾個相同的其他職位。
目前他們似乎沒有工作。
每次啓動容器時,如何確保數據集完全一致?無需每次重建圖像(由於數據集較大,這需要很長的時間)。
在此先感謝
編輯:
我也曾嘗試運行與喜歡不同參數的容器: docker-compose up --force-recreate --build mysql
但這並沒有成功。容器被重建並重新啓動,但數據庫仍受我的測試影響。目前唯一解決我的問題是刪除整個容器和圖像。
這個答案可能對您有用:HTTP:// stackoverflow.com/a/27572665/1856086 –
@StasMakarov很好,它和我想要的完全相反。我不想堅持數據庫。我只想從某個點開始一個容器,做一些東西,然後把它全部扔掉,這樣我就可以從相同的開始開始...... –
您可以嘗試使用[官方Dockerfile](https://github.com/docker-library/mysql/blob/eeb0c33dfcad3db46a0dfb24c352d2a1601c7667/5.7/Dockerfile#L68),但沒有'VOLUME/var/lib/mysql'行(目前#68)。 這種方式刪除容器後不應該保存任何數據。這可能遠不是這個問題的最佳解決方案,但它可能有效。 –