如何在重启之间保持Windows 10上的MySQL容器

我正在使用本地Docker for Windows(在Windows 10上)进行WordPress开发。 我有两个容器:WordPress和MySQL。 MySQL容器有一个数据卷,其中DB数据在运行之间存储。

我用'docker-up up -d'开始容器,然后停下来'docker-compose down'。 当以这种方式停止时,MySQL数据会正确保存到数据卷中,下次启动时,我会看到所有更改都保留下来。

但是,如果我首先重新启动Windows 10而不停止MySQL容器,似乎自上次启动以来对数据库所做的更改不会被保存。 Docker for Windows足够聪明地启动重启之前运行的相同卷,但它是否真的不关心正确closures它们,以便保存数据库数据? 这是真的吗?还是我误解了任何东西?

什么是最可靠的方法来避免在系统重新启动时丢失数据? 在重新启动之前手动停止所有MySQL容器是一项繁琐的任务,特别是在运行多个服务器的情况下。 也许我可以创build一个脚本来parsing“docker ps”的输出,并在重启之前停止所有的MySQL容器,但是恐怕我可能在这里重新发明了一个轮子。

处理这种情况的最好方法是什么? 我search了高低,但没有发现一个话题。 我是唯一一个需要这个吗? 我在这里错过了什么?

任何帮助真的很感激! 谢谢!

PS我的docker-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_ 

你可以为你的MySQL数据使用一个命名的卷 。

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

(目标应该是MySQL存储数据的地方)

您需要通过右键单击Docker图标(位于右下angular)启动Docker引擎的Windows文件系统访问,并挂载共享的Windows驱动器。 如果这已经完成,您可能需要提供完整path的驱动器,即

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

也尝试删除./即改为:

  volumes: - wordpress:/var/www/html 

我做了一些额外的调查,我认为我问到的问题从来没有存在过。 它实际上是一个不同types的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数据库是空的(卷未安装,没有数据可读)。

如果要手动重新启动容器,所有持久数据都将正确加载。 所以这不是我想到的问题,而是一个不同的问题,幸运的是,一个不太严重的问题。

感谢大家试图帮助我解决这个问题!