未加-v执行docker-compose down后命名卷数据丢失,原因何在?
问题解答
- Docker没有删除你的命名卷。
- 数据丢失的核心原因是挂载路径错误:
MongoDB官方镜像的默认数据存储目录是/data/db,但你在compose配置里把命名卷挂载到了/usr/mongo-db/data——这个路径并不是MongoDB实际写入数据的位置。你之前添加的数据其实存在容器自身的可写层里,而非命名卷中。 - 关于
docker-compose命令的差异:docker-compose stop仅停止容器运行,容器本身及可写层数据会保留,因此重启后数据还在。docker-compose down默认会删除容器(连带容器可写层的数据),但不会删除命名卷;因为你的数据没存在命名卷里,所以容器被删后数据就丢失了。
修复方案
修改docker-compose.yml中的挂载路径,将命名卷指向MongoDB的默认数据目录:
version: "3" services: mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: root ports: - "27017:27017" volumes: - mongo-db:/data/db # 修正为MongoDB默认数据路径 volumes: mongo-db:
之后重新启动容器,数据就会持久化到命名卷中,即使执行docker-compose down再重启,数据也不会丢失。
内容的提问来源于stack exchange,提问作者avganka
相关产品推荐
相关产品推荐

