我使用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
答案 0 :(得分:0)
答案 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数据库为空(未安装卷,无法读取数据)。
如果要手动重启容器,所有持久数据都将正确加载。所以这不是我想到的问题,而是一个不同的问题,幸运的是,这个问题要严重得多。
感谢大家帮我解决这个问题!