如何在重新启动之间在Windows 10上保留MySQL容器

时间:2017-05-30 10:02:48

标签: mysql wordpress windows docker containers

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

我用' docker-compose up -d'然后停下来与#docker-compose down'当以这种方式停止时,MySQL数据被正确保存到数据卷中,当我下次启动它时,我看到所有更改都保持不变。

但是,如果我在不先停止MySQL容器的情况下重新启动Windows 10,则似乎不会保存自上次启动以来对数据库所做的更改。 Docker for Windows非常智能,可以启动在重启之前运行的相同卷,但它真的不关心正确关闭它们以便保存数据库数据吗?是真的如此还是我误解了什么?

避免在系统重启时丢失数据的最可靠方法是什么?在重新启动之前手动停止所有MySQL容器是一项繁琐的任务,尤其是在运行多个服务器时。也许我可以创建一个脚本来解析' docker ps'输出并将在重新启动之前停止所有MySQL容器,但我担心我可能在这里重新发明了一个轮子。

处理情况的最佳方法是什么?我已经搜索过高低,但没有找到任何主题。我是唯一一个需要这个的人吗?我在这里错过了什么吗?

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

P.S。我的docker-compose.yml文件是:

psrldq xmm0, 4
movq rax, xmm0

3 个答案:

答案 0 :(得分:0)

您可以使用named volume作为MySQL数据。

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

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

答案 1 :(得分:0)

您需要通过右键单击Docker Icon(位于右下角)并安装共享Windows驱动器,从Docker引擎启用Windows文件系统访问。如果已经完成,您可能需要提供驱动器的完整路径,即

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

同时尝试删除./,即更改为:

 volumes:
  - wordpress:/var/www/html

答案 2 :(得分: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数据库为空(未安装卷,无法读取数据)。

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

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