我一直在为这个问题苦苦挣扎了一段时间。我想要使用一组特定的数据进行性能测试。 为了实现这一点,我使用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)。 这种方式删除容器后不应该保存任何数据。这可能远不是这个问题的最佳解决方案,但它可能有效。 –